hadoop-zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Patrick Hunt <ph...@apache.org>
Subject Re: znode cversion decreasing?
Date Mon, 12 Apr 2010 23:41:17 GMT
Probably reaching for straws but could you print "path", just to confirm 
it's what you know it is?

Patrick

On 04/12/2010 02:53 PM, Kevin Webb wrote:
> On Mon, 12 Apr 2010 14:33:44 -0700
> Mahadev Konar<mahadev@yahoo-inc.com>  wrote:
>
>> Hi Kevin,
>>
>>   Thanks for the info. Could you cut and paste the code you are using
>> that prints the view info?
>> That would help. We can then create a jira and follow up on that.
>>
>> Also, a zookeeper client can never go back in time (even if its gets
>> disconnected and connected back to another server).
>>
>> Thanks
>> mahadev
>
> Ah, sorry, I meant to include that last time.
>
> This is the function I use to read the cversion:
>
> static int32_t read_path_cversion(zhandle_t *zkhandle, const char
> *path) {
>      struct Stat stat;
>      int zoo_result;
>
>      memset(&stat, 0, sizeof(struct Stat));
>
>      zoo_result = zoo_exists(zkhandle, path, 0,&stat);
>
>      if (zoo_result != ZOK) {
>          return -1;
>      }
>
>      return stat.cversion;
> }
>
> It gets called by this function, which is called whenever the client
> (re)connects to the server or when the watch on the group node gets
> triggered:
>
> static int process_membership_change(zhandle_t *zkhandle, zk_comm_t
> *context, const char *path) {
>      struct String_vector children;
>      int32_t view_before = 0;
>      int32_t view_after = view_before + 1;
>      int zoo_result = 0;
>      int i;
>
>      while (view_before != view_after) {
>          view_before = read_path_cversion(zkhandle, path);
>
>          zoo_result = zoo_get_children(zkhandle, path, 1,&children);
>          if (zoo_result != ZOK) {
>              return zoo_result;
>          }
>
>          view_after = read_path_cversion(zkhandle, path);
>      }
>
>      printlog(LOG_CRITICAL, "ZK(%" PRIu32 "): %u Beginning new view #%"
> PRId32 ".  Unsetting panic...\n", context->comm->id, time(NULL),
> view_after);
>
>      (call application function to restart with group #view_after)
>
>      ...
>      More application logic
>      ...
> }
>
> Let me know if any other details would be helpful.
>
> -Kevin

Mime
View raw message