@Test public void testConflictingSnapshotVersionUpdate() throws Exception { accountService = mockHelixAccountServiceFactory.getAccountService(); writeAccountsForConflictTest(); Account expectedAccount = accountService.getAccountById((short) 1); int currentSnapshotVersion = expectedAccount.getSnapshotVersion(); for (int snapshotVersionOffset : new int[]{-2, -1, 1}) { int snapshotVersionToUse = currentSnapshotVersion + snapshotVersionOffset; Collection<Account> conflictAccounts = Collections.singleton( new AccountBuilder((short) 1, "c", AccountStatus.INACTIVE).snapshotVersion(snapshotVersionToUse).build()); assertFalse("Wrong return value from update operation.", accountService.updateAccounts(conflictAccounts)); assertEquals("Wrong account number in HelixAccountService", 2, accountService.getAllAccounts().size()); Account account = accountService.getAccountById((short) 1); assertEquals("Account should not have been updated", expectedAccount, account); assertEquals("Snapshot version should not have been updated", currentSnapshotVersion, account.getSnapshotVersion()); } Collection<Account> validAccounts = Collections.singleton( new AccountBuilder((short) 1, "c", AccountStatus.INACTIVE).snapshotVersion(currentSnapshotVersion).build()); updateAccountsAndAssertAccountExistence(validAccounts, 2, true); }
@Override public boolean updateAccounts(Collection<Account> accounts) { return updateAccountsWithAccountMetadataStore(accounts, accountMetadataStore); }
HelixAccountService extends AbstractAccountService implements AccountService { @Override public boolean updateAccounts(Collection<Account> accounts) { return updateAccountsWithAccountMetadataStore(accounts, accountMetadataStore); } }
HelixAccountService extends AbstractAccountService implements AccountService { @Override public boolean updateAccounts(Collection<Account> accounts) { return updateAccountsWithAccountMetadataStore(accounts, accountMetadataStore); } HelixAccountService(HelixPropertyStore<ZNRecord> helixStore, AccountServiceMetrics accountServiceMetrics,
      Notifier<String> notifier, ScheduledExecutorService scheduler, HelixAccountServiceConfig config); }
HelixAccountService extends AbstractAccountService implements AccountService { @Override public boolean updateAccounts(Collection<Account> accounts) { return updateAccountsWithAccountMetadataStore(accounts, accountMetadataStore); } HelixAccountService(HelixPropertyStore<ZNRecord> helixStore, AccountServiceMetrics accountServiceMetrics,
      Notifier<String> notifier, ScheduledExecutorService scheduler, HelixAccountServiceConfig config); void setupRouter(final Router router); @Override boolean updateAccounts(Collection<Account> accounts); @Override void close(); void selectInactiveContainersAndMarkInZK(StatsSnapshot statsSnapshot); }
HelixAccountService extends AbstractAccountService implements AccountService { @Override public boolean updateAccounts(Collection<Account> accounts) { return updateAccountsWithAccountMetadataStore(accounts, accountMetadataStore); } HelixAccountService(HelixPropertyStore<ZNRecord> helixStore, AccountServiceMetrics accountServiceMetrics,
      Notifier<String> notifier, ScheduledExecutorService scheduler, HelixAccountServiceConfig config); void setupRouter(final Router router); @Override boolean updateAccounts(Collection<Account> accounts); @Override void close(); void selectInactiveContainersAndMarkInZK(StatsSnapshot statsSnapshot);  }