Package org.kiji.schema.zookeeper

Examples of org.kiji.schema.zookeeper.UsersTracker


      final HBaseAdminFactory adminFactory
  ) throws IOException {
    final CuratorFramework zkClient = ZooKeeperUtils.getZooKeeperClient(uri);
    final String instanceZKPath = ZooKeeperUtils.getInstanceDir(uri).getPath();
    try {
      final UsersTracker usersTracker = ZooKeeperUtils.newInstanceUsersTracker(zkClient, uri);
      try {
        usersTracker.start();
        final Set<String> users = usersTracker.getUsers().keySet();
        if (!users.isEmpty()) {
          LOG.error(
              "Uninstalling Kiji instance '{}' with registered users."
                  + " Current registered users: {}. Stale instance metadata will remain in"
                  + " ZooKeeper at path {}.", uri.getInstance(), users, instanceZKPath);
        }
      } finally {
        usersTracker.close();
      }

      // The uninstall of tables from HBase is the same as System_1_0
      uninstallSystem_1_0(uri, conf, adminFactory);
View Full Code Here


      final TableLayoutTracker layoutTracker =
          new TableLayoutTracker(mZKClient, mTableURI, mLayoutUpdateHandler);
      try {
        layoutTracker.start();
        final UsersTracker usersTracker =
            ZooKeeperUtils
                .newTableUsersTracker(mZKClient, mTableURI)
                .registerUpdateHandler(mUsersUpdateHandler);
        try {
          usersTracker.start();
          final String currentLayoutId = mLayoutUpdateHandler.getCurrentLayoutId();
          LOG.info("Table {} has current layout ID {}.", mTableURI, currentLayoutId);
          if (!Objects.equal(currentLayoutId, currentLayout.getDesc().getLayoutId())) {
            throw new InternalKijiError(String.format(
                "Inconsistency between meta-table and ZooKeeper: "
                + "meta-table layout has ID %s while ZooKeeper has layout ID %s.",
                currentLayout.getDesc().getLayoutId(), currentLayoutId));
          }

          final String consistentLayoutId = waitForConsistentView();
          if ((consistentLayoutId != null) && !Objects.equal(consistentLayoutId, currentLayoutId)) {
            throw new InternalKijiError(String.format(
                "Consistent layout ID %s does not match current layout %s for table %s.",
                consistentLayoutId, currentLayout, mTableURI));
          }

          writeMetaTable(update);
          final TableLayoutDesc newLayoutDesc = mNewLayout.getDesc();
          writeZooKeeper(newLayoutDesc);

          mLayoutUpdateHandler.waitForLayoutNotification(newLayoutDesc.getLayoutId());

          // The following is not necessary:
          while (true) {
            final String newLayoutId = waitForConsistentView();
            if (newLayoutId == null) {
              LOG.info("Layout update complete for table {}: table has no users.", mTableURI);
              break;
            } else if (Objects.equal(newLayoutId, newLayoutDesc.getLayoutId())) {
              LOG.info("Layout update complete for table {}: all users switched to layout ID {}.",
                  mTableURI, newLayoutId);
              break;
            } else {
              LOG.info("Layout update in progress for table {}: users still using layout ID {}.",
                  mTableURI, newLayoutId);
              Time.sleep(1.0);
            }
          }

        } finally {
          usersTracker.close();
        }
      } finally {
        layoutTracker.close();
      }
    } finally {
View Full Code Here

   * @throws IOException on unrecoverable error.
   */
  private void deleteTableSystem_2_0(String tableName) throws IOException {
    final KijiURI tableURI = KijiURI.newBuilder(mURI).withTableName(tableName).build();
    final String tableZKPath = ZooKeeperUtils.getTableDir(tableURI).getPath();
    final UsersTracker usersTracker = ZooKeeperUtils.newTableUsersTracker(mZKClient, tableURI);
    try {
      usersTracker.start();
      final Set<String> users = usersTracker.getUsers().keySet();
      if (!users.isEmpty()) {
        LOG.warn(
            "Uninstalling Kiji table '{}' with registered users."
                + " Current registered users: {}. Stale table metadata will remain in"
                + " ZooKeeper at path {}.", tableName, users, tableZKPath);
      }
    } finally {
      usersTracker.close();
    }

    // The delete of tables from HBase is the same as System_1_0
    deleteTableSystem_1_0(tableName);

View Full Code Here

      validator.validate(currentLayout, updatedLayout);

      final TableLayoutTracker layoutTracker =
          new TableLayoutTracker(mZKClient, mTableURI, mLayoutUpdateHandler).start();
      try {
        final UsersTracker usersTracker = ZooKeeperUtils.newTableUsersTracker(mZKClient, mTableURI);
        usersTracker.registerUpdateHandler(mUsersUpdateHandler);
        try {
          usersTracker.start();
          final String currentLayoutId = mLayoutUpdateHandler.getCurrentLayoutId();
          LOG.info("Table {} has current layout ID {}.", mTableURI, currentLayoutId);
          if (!Objects.equal(currentLayoutId, currentLayout.getDesc().getLayoutId())) {
            throw new InternalKijiError(String.format(
                "Inconsistency between meta-table and ZooKeeper: "
                + "meta-table layout has ID %s while ZooKeeper has layout ID %s.",
                currentLayout.getDesc().getLayoutId(), currentLayoutId));
          }

          final String consistentLayoutId = waitForConsistentView();
          if ((consistentLayoutId != null) && !Objects.equal(consistentLayoutId, currentLayoutId)) {
            throw new InternalKijiError(String.format(
                "Consistent layout ID %s does not match current layout %s for table %s.",
                consistentLayoutId, currentLayout, mTableURI));
          }

          writeMetaTable(update);
          final TableLayoutDesc newLayoutDesc = mNewLayout.getDesc();
          writeZooKeeper(newLayoutDesc);

          mLayoutUpdateHandler.waitForLayoutNotification(newLayoutDesc.getLayoutId());

          // The following is not necessary:
          while (true) {
            final String newLayoutId = waitForConsistentView();
            if (newLayoutId == null) {
              LOG.info("Layout update complete for table {}: table has no users.", mTableURI);
              break;
            } else if (Objects.equal(newLayoutId, newLayoutDesc.getLayoutId())) {
              LOG.info("Layout update complete for table {}: all users switched to layout ID {}.",
                  mTableURI, newLayoutId);
              break;
            } else {
              LOG.info("Layout update in progress for table {}: users still using layout ID {}.",
                  mTableURI, newLayoutId);
              Time.sleep(1.0);
            }
          }

        } finally {
          usersTracker.close();
        }

      } finally {
        layoutTracker.close();
      }
View Full Code Here

    layoutDesc.setName(tableName);
    kiji.createTable(layoutDesc);

    final BlockingQueue<Multimap<String, String>> queue = Queues.newSynchronousQueue();

    final UsersTracker tracker =
        ZooKeeperUtils
            .newTableUsersTracker(kiji.getZKClient(), tableURI)
            .registerUpdateHandler(new QueueingUsersUpdateHandler(queue));
    try {
      tracker.start();
      // Initial user map should be empty:
      assertEquals(ImmutableSetMultimap.<String, String>of(), queue.poll(1, TimeUnit.SECONDS));

      final KijiTable table = kiji.openTable(tableName);
      try {
        // We opened a table, user map must contain exactly one entry:
        final Multimap<String, String> umap = queue.poll(1, TimeUnit.SECONDS);
        assertEquals(ImmutableSet.of(layoutId1), ImmutableSet.copyOf(umap.values()));
      } finally {
        table.release();
      }
      // Table is now closed, the user map should become empty:
      assertEquals(ImmutableSetMultimap.<String, String>of(), queue.poll(1, TimeUnit.SECONDS));
    } finally {
      tracker.close();
    }
  }
View Full Code Here

      layoutDesc.setName(tableName);
      kiji.createTable(layoutDesc);

      final BlockingQueue<Multimap<String, String>> queue = Queues.newArrayBlockingQueue(10);

      final UsersTracker tracker =
          ZooKeeperUtils
              .newTableUsersTracker(kiji.getZKClient(), tableURI)
              .registerUpdateHandler(new QueueingUsersUpdateHandler(queue));
      try {
        tracker.start();
        // Initial user map should be empty:
        assertEquals(ImmutableSetMultimap.<String, String>of(), queue.poll(2, TimeUnit.SECONDS));

        KijiTable kijiTable = kiji.openTable(tableName);
        try {
          // We opened a table, user map must contain exactly one entry:
          assertEquals(ImmutableSet.of(layoutId1),
              ImmutableSet.copyOf(queue.poll(2, TimeUnit.SECONDS).values()));

          // Push a layout update (a no-op, but with a new layout ID):
          final TableLayoutDesc newLayoutDesc =
              KijiTableLayouts.getLayout(KijiTableLayouts.FOO_TEST);
          newLayoutDesc.setReferenceLayout(layoutId1);
          newLayoutDesc.setLayoutId(layoutId2);
          newLayoutDesc.setName(tableName);

          kiji.modifyTableLayout(newLayoutDesc);

          // The new user map should eventually reflect the new layout ID. There may be an
          // intermediate state of no registered users, and then the table user is re-registered
          // with the new layout.
          Collection<String> users = queue.take().values();
          if (users.isEmpty()) {
            users = queue.take().values();
          }
          assertEquals(ImmutableSet.of(layoutId2),
            ImmutableSet.copyOf(users));

        } finally {
          kijiTable.release();
        }

        // Table is now closed, the user map should become empty:
        assertEquals(ImmutableSetMultimap.<String, String>of(), queue.poll(2, TimeUnit.SECONDS));
      } finally {
        tracker.close();
      }
    } finally {
      kiji.release();
    }
  }
View Full Code Here

  }

  @Test
  public void testReleasingTableLayoutMonitorWillUpdateZooKeeper() throws Exception {
    final BlockingQueue<Multimap<String, String>> usersQueue = Queues.newSynchronousQueue();
    final UsersTracker tracker =
        ZooKeeperUtils
            .newTableUsersTracker(mZKClient, mTableURI)
            .registerUpdateHandler(new QueueingUsersUpdateHandler(usersQueue));
    try {
      tracker.start();
      Assert.assertEquals(ImmutableSetMultimap.<String, String>of(),
          usersQueue.poll(1, TimeUnit.SECONDS));

      mInstanceMonitor.getTableLayoutMonitor(mTableURI.getTable());

      Multimap<String, String> registeredUsers = usersQueue.poll(1, TimeUnit.SECONDS);
      Assert.assertEquals(1, registeredUsers.size());
      Assert.assertTrue(registeredUsers.containsValue("1"));

      mInstanceMonitor.close();

      Assert.assertEquals(ImmutableSetMultimap.<String, String>of(),
          usersQueue.poll(1, TimeUnit.SECONDS));
    } finally {
      tracker.close();
    }
  }
View Full Code Here

TOP

Related Classes of org.kiji.schema.zookeeper.UsersTracker

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.