Question

I am working with Admin SDK .when I update single user it's working fine but when I am trying to update bunch(1000) of users I got User Rate Limit Exceeded Exception. Please check below my code and tell me what am i missing ? or tell any suggestion ?

 private Directory getDirectoryService(String adminEmailAddress){
 Directory directoryService = null;
 try {
      Collection<String> SCOPES = new ArrayList<String>();
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.user");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.user.readonly");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.group");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.group.readonly");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.orgunit");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.orgunit.readonly");
      SCOPES.add("https://www.googleapis.com/auth/userinfo.profile");

      HttpTransport httpTransport = new NetHttpTransport();
      JacksonFactory jsonFactory = new JacksonFactory();
      GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
      .setServiceAccountScopes(SCOPES)
      .setServiceAccountUser(adminEmailAddress)
      .setServiceAccountPrivateKeyFromP12File(new                                                         java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)).build();

    directoryService = new Directory.Builder(httpTransport,jsonFactory, credential).setApplicationName("gdirectoryspring").build();

 } catch(Exception e){
   ErrorHandler.errorHandler(this.getClass().getName(), e);
 }
 return directoryService;
}

Below is Update User Code

Directory directoryService = getDirectoryService("adminEmailAddress");
User user = directoryService.users().get("userPrimaryEmail").execute();
       List<UserOrganization> organizaionList = user.getOrganizations();
       for (int j = 0; j < organizaionList.size(); j++)
       {
         UserOrganization singleOrg = organizaionList.get(j);
         if (singleOrg != null)
         {
          if ("work".equalsIgnoreCase(singleOrg.getCustomType()) ||singleOrg.getPrimary() != null)  
  {
  if (singleOrg.getTitle() != null)
  { 
    singleOrg.setTitle(jobTitle);
   }
  }
 }
  user.setOrganizations(organizaionList);
}

       Update update= directoryService.users().update(primaryEmail, user);
       User userUpdated = update.execute();

and in admin console I increased my limit like below

Admin SDK   10.0 requests/second/user

but till I am getting User Rate Limit Exceeded Excepiton. can any one help me?

Était-ce utile?

La solution

You are missing exponential backoff. See here for an example (its for drive but can be adapted) https://developers.google.com/drive/handle-errors#implementing_exponential_backoff in there you will see how it deals with errors like 'userRateLimitExceeded'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top