Example #1
0
  public CommandResponse doSITE_REMERGE(CommandRequest request) {
    if (!request.hasArgument()) {
      return StandardCommandManager.genericResponse("RESPONSE_501_SYNTAX_ERROR");
    }

    RemoteSlave rslave;

    try {
      rslave =
          GlobalContext.getGlobalContext().getSlaveManager().getRemoteSlave(request.getArgument());
    } catch (ObjectNotFoundException e) {
      return new CommandResponse(200, "No such slave");
    }

    if (!rslave.isAvailable()) {
      return new CommandResponse(200, "Slave is still merging from initial connect");
    }

    if (rslave.isRemerging()) {
      return new CommandResponse(200, "Slave is still remerging by a previous remerge command");
    }

    boolean CRCRemerge =
        GlobalContext.getConfig()
            .getMainProperties()
            .getProperty("crc.remerge.mode", "true")
            .equals("true");
    rslave.setRemerging(true);
    try {
      rslave.fetchResponse(
          SlaveManager.getBasicIssuer()
              .issueRemergeToSlave(
                  rslave,
                  request.getCurrentDirectory().getPath(),
                  false,
                  0L,
                  0L,
                  false,
                  CRCRemerge),
          0);
    } catch (RemoteIOException e) {
      rslave.setOffline("IOException during remerge()");

      return new CommandResponse(200, "IOException during remerge()");
    } catch (SlaveUnavailableException e) {
      rslave.setOffline("Slave Unavailable during remerge()");

      return new CommandResponse(200, "Slave Unavailable during remerge()");
    } finally {
      String message = ("Remerge queueprocess finished");
      GlobalContext.getEventService().publishAsync(new SlaveEvent("MSGSLAVE", message, rslave));
      rslave.setRemerging(false);
    }

    return StandardCommandManager.genericResponse("RESPONSE_200_COMMAND_OK");
  }