zookeeper-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From an...@apache.org
Subject [47/51] [partial] zookeeper git commit: ZOOKEEPER-3032: MAVEN MIGRATION - zookeeper-server
Date Fri, 19 Oct 2018 12:40:45 GMT
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/Login.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/Login.java b/zookeeper-common/src/main/java/org/apache/zookeeper/Login.java
deleted file mode 100644
index d97d6c1..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/Login.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-/**
- * This class is responsible for refreshing Kerberos credentials for
- * logins for both Zookeeper client and server.
- * See ZooKeeperSaslServer for server-side usage.
- * See ZooKeeperSaslClient for client-side usage.
- */
-
-import javax.security.auth.kerberos.KerberosPrincipal;
-import javax.security.auth.login.AppConfigurationEntry;
-import javax.security.auth.login.Configuration;
-import javax.security.auth.login.LoginContext;
-import javax.security.auth.login.LoginException;
-import javax.security.auth.callback.CallbackHandler;
-
-import org.apache.zookeeper.client.ZKClientConfig;
-import org.apache.zookeeper.common.ZKConfig;
-import org.apache.zookeeper.server.ZooKeeperSaslServer;
-import org.apache.zookeeper.common.Time;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.security.auth.kerberos.KerberosTicket;
-import javax.security.auth.Subject;
-
-import java.util.Date;
-import java.util.Random;
-import java.util.Set;
-
-public class Login {
-    private static final String KINIT_COMMAND_DEFAULT = "/usr/bin/kinit";
-    private static final Logger LOG = LoggerFactory.getLogger(Login.class);
-    public CallbackHandler callbackHandler;
-
-    // LoginThread will sleep until 80% of time from last refresh to
-    // ticket's expiry has been reached, at which time it will wake
-    // and try to renew the ticket.
-    private static final float TICKET_RENEW_WINDOW = 0.80f;
-
-    /**
-     * Percentage of random jitter added to the renewal time
-     */
-    private static final float TICKET_RENEW_JITTER = 0.05f;
-
-    // Regardless of TICKET_RENEW_WINDOW setting above and the ticket expiry time,
-    // thread will not sleep between refresh attempts any less than 1 minute (60*1000 milliseconds = 1 minute).
-    // Change the '1' to e.g. 5, to change this to 5 minutes.
-    private static final long MIN_TIME_BEFORE_RELOGIN = 1 * 60 * 1000L;
-
-    private Subject subject = null;
-    private Thread t = null;
-    private boolean isKrbTicket = false;
-    private boolean isUsingTicketCache = false;
-
-    /** Random number generator */
-    private static Random rng = new Random();
-
-    private LoginContext login = null;
-    private String loginContextName = null;
-    private String principal = null;
-
-    // Initialize 'lastLogin' to do a login at first time
-    private long lastLogin = Time.currentElapsedTime() - MIN_TIME_BEFORE_RELOGIN;
-    private final ZKConfig zkConfig;
-
-    /**
-     * LoginThread constructor. The constructor starts the thread used to
-     * periodically re-login to the Kerberos Ticket Granting Server.
-     * 
-     * @param loginContextName
-     *            name of section in JAAS file that will be use to login. Passed
-     *            as first param to javax.security.auth.login.LoginContext().
-     *
-     * @param callbackHandler
-     *            Passed as second param to
-     *            javax.security.auth.login.LoginContext().
-     * @param zkConfig
-     *            client or server configurations
-     * @throws javax.security.auth.login.LoginException
-     *             Thrown if authentication fails.
-     */
-    public Login(final String loginContextName, CallbackHandler callbackHandler, final ZKConfig zkConfig)
-            throws LoginException {
-        this.zkConfig=zkConfig;
-        this.callbackHandler = callbackHandler;
-        login = login(loginContextName);
-        this.loginContextName = loginContextName;
-        subject = login.getSubject();
-        isKrbTicket = !subject.getPrivateCredentials(KerberosTicket.class).isEmpty();
-        AppConfigurationEntry entries[] = Configuration.getConfiguration().getAppConfigurationEntry(loginContextName);
-        for (AppConfigurationEntry entry: entries) {
-            // there will only be a single entry, so this for() loop will only be iterated through once.
-            if (entry.getOptions().get("useTicketCache") != null) {
-                String val = (String)entry.getOptions().get("useTicketCache");
-                if (val.equals("true")) {
-                    isUsingTicketCache = true;
-                }
-            }
-            if (entry.getOptions().get("principal") != null) {
-                principal = (String)entry.getOptions().get("principal");
-            }
-            break;
-        }
-
-        if (!isKrbTicket) {
-            // if no TGT, do not bother with ticket management.
-            return;
-        }
-
-        // Refresh the Ticket Granting Ticket (TGT) periodically. How often to refresh is determined by the
-        // TGT's existing expiry date and the configured MIN_TIME_BEFORE_RELOGIN. For testing and development,
-        // you can decrease the interval of expiration of tickets (for example, to 3 minutes) by running :
-        //  "modprinc -maxlife 3mins <principal>" in kadmin.
-        t = new Thread(new Runnable() {
-            public void run() {
-                LOG.info("TGT refresh thread started.");
-                while (true) {  // renewal thread's main loop. if it exits from here, thread will exit.
-                    KerberosTicket tgt = getTGT();
-                    long now = Time.currentWallTime();
-                    long nextRefresh;
-                    Date nextRefreshDate;
-                    if (tgt == null) {
-                        nextRefresh = now + MIN_TIME_BEFORE_RELOGIN;
-                        nextRefreshDate = new Date(nextRefresh);
-                        LOG.warn("No TGT found: will try again at {}", nextRefreshDate);
-                    } else {
-                        nextRefresh = getRefreshTime(tgt);
-                        long expiry = tgt.getEndTime().getTime();
-                        Date expiryDate = new Date(expiry);
-                        if ((isUsingTicketCache) && (tgt.getEndTime().equals(tgt.getRenewTill()))) {
-                            Object[] logPayload = {expiryDate, principal, principal};
-                            LOG.error("The TGT cannot be renewed beyond the next expiry date: {}." +
-                                    "This process will not be able to authenticate new SASL connections after that " +
-                                    "time (for example, it will not be authenticate a new connection with a Zookeeper " +
-                                    "Quorum member).  Ask your system administrator to either increase the " +
-                                    "'renew until' time by doing : 'modprinc -maxrenewlife {}' within " +
-                                    "kadmin, or instead, to generate a keytab for {}. Because the TGT's " +
-                                    "expiry cannot be further extended by refreshing, exiting refresh thread now.", logPayload);
-                            return;
-                        }
-                        // determine how long to sleep from looking at ticket's expiry.
-                        // We should not allow the ticket to expire, but we should take into consideration
-                        // MIN_TIME_BEFORE_RELOGIN. Will not sleep less than MIN_TIME_BEFORE_RELOGIN, unless doing so
-                        // would cause ticket expiration.
-                        if ((nextRefresh > expiry) ||
-                                ((now + MIN_TIME_BEFORE_RELOGIN) > expiry)) {
-                            // expiry is before next scheduled refresh).
-                            nextRefresh = now;
-                        } else {
-                            if (nextRefresh < (now + MIN_TIME_BEFORE_RELOGIN)) {
-                                // next scheduled refresh is sooner than (now + MIN_TIME_BEFORE_LOGIN).
-                                Date until = new Date(nextRefresh);
-                                Date newuntil = new Date(now + MIN_TIME_BEFORE_RELOGIN);
-                                Object[] logPayload = {until, newuntil, (MIN_TIME_BEFORE_RELOGIN / 1000)};
-                                LOG.warn("TGT refresh thread time adjusted from : {} to : {} since "
-                                        + "the former is sooner than the minimum refresh interval ("
-                                        + "{} seconds) from now.", logPayload);
-                            }
-                            nextRefresh = Math.max(nextRefresh, now + MIN_TIME_BEFORE_RELOGIN);
-                        }
-                        nextRefreshDate = new Date(nextRefresh);
-                        if (nextRefresh > expiry) {
-                            Object[] logPayload = {nextRefreshDate, expiryDate};
-                            LOG.error("next refresh: {} is later than expiry {}."
-                                    + " This may indicate a clock skew problem. Check that this host and the KDC's "
-                                    + "hosts' clocks are in sync. Exiting refresh thread.", logPayload);
-                            return;
-                        }
-                    }
-                    if (now == nextRefresh) {
-                        LOG.info("refreshing now because expiry is before next scheduled refresh time.");
-                    } else if (now < nextRefresh) {
-                        Date until = new Date(nextRefresh);
-                        LOG.info("TGT refresh sleeping until: {}", until.toString());
-                        try {
-                            Thread.sleep(nextRefresh - now);
-                        } catch (InterruptedException ie) {
-                            LOG.warn("TGT renewal thread has been interrupted and will exit.");
-                            break;
-                        }
-                    }
-                    else {
-                        LOG.error("nextRefresh:{} is in the past: exiting refresh thread. Check"
-                                + " clock sync between this host and KDC - (KDC's clock is likely ahead of this host)."
-                                + " Manual intervention will be required for this client to successfully authenticate."
-                                + " Exiting refresh thread.", nextRefreshDate);
-                        break;
-                    }
-                    if (isUsingTicketCache) {
-                        String cmd = zkConfig.getProperty(ZKConfig.KINIT_COMMAND, KINIT_COMMAND_DEFAULT);
-                        String kinitArgs = "-R";
-                        int retry = 1;
-                        while (retry >= 0) {
-                            try {
-                                LOG.debug("running ticket cache refresh command: {} {}", cmd, kinitArgs);
-                                Shell.execCommand(cmd, kinitArgs);
-                                break;
-                            } catch (Exception e) {
-                                if (retry > 0) {
-                                    --retry;
-                                    // sleep for 10 seconds
-                                    try {
-                                        Thread.sleep(10 * 1000);
-                                    } catch (InterruptedException ie) {
-                                        LOG.error("Interrupted while renewing TGT, exiting Login thread");
-                                        return;
-                                    }
-                                } else {
-                                    Object[] logPayload = {cmd, kinitArgs, e.toString(), e};
-                                    LOG.warn("Could not renew TGT due to problem running shell command: '{}"
-                                            + " {}'; exception was:{}. Exiting refresh thread.", logPayload);
-                                    return;
-                                }
-                            }
-                        }
-                    }
-                    try {
-                        int retry = 1;
-                        while (retry >= 0) {
-                            try {
-                                reLogin();
-                                break;
-                            } catch (LoginException le) {
-                                if (retry > 0) {
-                                    --retry;
-                                    // sleep for 10 seconds.
-                                    try {
-                                        Thread.sleep(10 * 1000);
-                                    } catch (InterruptedException e) {
-                                        LOG.error("Interrupted during login retry after LoginException:", le);
-                                        throw le;
-                                    }
-                                } else {
-                                    LOG.error("Could not refresh TGT for principal: {}.", principal, le);
-                                }
-                            }
-                        }
-                    } catch (LoginException le) {
-                        LOG.error("Failed to refresh TGT: refresh thread exiting now.",le);
-                        break;
-                    }
-                }
-            }
-        });
-        t.setDaemon(true);
-    }
-
-    public void startThreadIfNeeded() {
-        // thread object 't' will be null if a refresh thread is not needed.
-        if (t != null) {
-            t.start();
-        }
-    }
-
-    public void shutdown() {
-        if ((t != null) && (t.isAlive())) {
-            t.interrupt();
-            try {
-                t.join();
-            } catch (InterruptedException e) {
-                LOG.warn("error while waiting for Login thread to shutdown: ", e);
-            }
-        }
-    }
-
-    public Subject getSubject() {
-        return subject;
-    }
-
-    public String getLoginContextName() {
-        return loginContextName;
-    }
-
-    private synchronized LoginContext login(final String loginContextName) throws LoginException {
-        if (loginContextName == null) {
-            throw new LoginException("loginContext name (JAAS file section header) was null. " +
-                    "Please check your java.security.login.auth.config (=" +
-                    System.getProperty("java.security.login.auth.config") +
-                    ") and your " + getLoginContextMessage());
-        }
-        LoginContext loginContext = new LoginContext(loginContextName,callbackHandler);
-        loginContext.login();
-        LOG.info("{} successfully logged in.", loginContextName);
-        return loginContext;
-    }
-
-    private String getLoginContextMessage() {
-        if (zkConfig instanceof ZKClientConfig) {
-            return ZKClientConfig.LOGIN_CONTEXT_NAME_KEY + "(=" + zkConfig.getProperty(
-                    ZKClientConfig.LOGIN_CONTEXT_NAME_KEY, ZKClientConfig.LOGIN_CONTEXT_NAME_KEY_DEFAULT) + ")";
-        } else {
-            return ZooKeeperSaslServer.LOGIN_CONTEXT_NAME_KEY + "(=" + System.getProperty(
-                    ZooKeeperSaslServer.LOGIN_CONTEXT_NAME_KEY, ZooKeeperSaslServer.DEFAULT_LOGIN_CONTEXT_NAME) + ")";
-        }
-    }
-
-    // c.f. org.apache.hadoop.security.UserGroupInformation.
-    private long getRefreshTime(KerberosTicket tgt) {
-        long start = tgt.getStartTime().getTime();
-        long expires = tgt.getEndTime().getTime();
-        LOG.info("TGT valid starting at:        {}", tgt.getStartTime().toString());
-        LOG.info("TGT expires:                  {}", tgt.getEndTime().toString());
-        long proposedRefresh = start + (long) ((expires - start) *
-                (TICKET_RENEW_WINDOW + (TICKET_RENEW_JITTER * rng.nextDouble())));
-        if (proposedRefresh > expires) {
-            // proposedRefresh is too far in the future: it's after ticket expires: simply return now.
-            return Time.currentWallTime();
-        }
-        else {
-            return proposedRefresh;
-        }
-    }
-
-    private synchronized KerberosTicket getTGT() {
-        Set<KerberosTicket> tickets = subject.getPrivateCredentials(KerberosTicket.class);
-        for(KerberosTicket ticket: tickets) {
-            KerberosPrincipal server = ticket.getServer();
-            if (server.getName().equals("krbtgt/" + server.getRealm() + "@" + server.getRealm())) {
-                LOG.debug("Client principal is \"" + ticket.getClient().getName() + "\".");
-                LOG.debug("Server principal is \"" + ticket.getServer().getName() + "\".");
-                return ticket;
-            }
-        }
-        return null;
-    }
-
-    private boolean hasSufficientTimeElapsed() {
-        long now = Time.currentElapsedTime();
-        if (now - getLastLogin() < MIN_TIME_BEFORE_RELOGIN ) {
-            LOG.warn("Not attempting to re-login since the last re-login was "
-                    + "attempted less than {} seconds before.",
-                    (MIN_TIME_BEFORE_RELOGIN / 1000));
-            return false;
-        }
-        // register most recent relogin attempt
-        setLastLogin(now);
-        return true;
-    }
-
-    /**
-     * Returns login object
-     * @return login
-     */
-    private LoginContext getLogin() {
-        return login;
-    }
-
-    /**
-     * Set the login object
-     * @param login
-     */
-    private void setLogin(LoginContext login) {
-        this.login = login;
-    }
-
-    /**
-     * Set the last login time.
-     * @param time the number of milliseconds since the beginning of time
-     */
-    private void setLastLogin(long time) {
-        lastLogin = time;
-    }
-
-    /**
-     * Get the time of the last login.
-     * @return the number of milliseconds since the beginning of time.
-     */
-    private long getLastLogin() {
-        return lastLogin;
-    }
-
-    /**
-     * Re-login a principal. This method assumes that {@link #login(String)} has happened already.
-     * @throws javax.security.auth.login.LoginException on a failure
-     */
-    // c.f. HADOOP-6559
-    private synchronized void reLogin()
-            throws LoginException {
-        if (!isKrbTicket) {
-            return;
-        }
-        LoginContext login = getLogin();
-        if (login  == null) {
-            throw new LoginException("login must be done first");
-        }
-        if (!hasSufficientTimeElapsed()) {
-            return;
-        }
-        LOG.info("Initiating logout for {}", principal);
-        synchronized (Login.class) {
-            //clear up the kerberos state. But the tokens are not cleared! As per
-            //the Java kerberos login module code, only the kerberos credentials
-            //are cleared
-            login.logout();
-            //login and also update the subject field of this instance to
-            //have the new credentials (pass it to the LoginContext constructor)
-            login = new LoginContext(loginContextName, getSubject());
-            LOG.info("Initiating re-login for {}", principal);
-            login.login();
-            setLogin(login);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/MultiResponse.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/MultiResponse.java b/zookeeper-common/src/main/java/org/apache/zookeeper/MultiResponse.java
deleted file mode 100644
index 5ac906a..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/MultiResponse.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-import org.apache.jute.InputArchive;
-import org.apache.jute.OutputArchive;
-import org.apache.jute.Record;
-import org.apache.zookeeper.proto.Create2Response;
-import org.apache.zookeeper.proto.CreateResponse;
-import org.apache.zookeeper.proto.MultiHeader;
-import org.apache.zookeeper.proto.SetDataResponse;
-import org.apache.zookeeper.proto.ErrorResponse;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Handles the response from a multi request.  Such a response consists of
- * a sequence of responses each prefixed by a MultiResponse that indicates
- * the type of the response.  The end of the list is indicated by a MultiHeader
- * with a negative type.  Each individual response is in the same format as
- * with the corresponding operation in the original request list.
- */
-public class MultiResponse implements Record, Iterable<OpResult> {
-    private List<OpResult> results = new ArrayList<OpResult>();
-
-    public void add(OpResult x) {
-        results.add(x);
-    }
-
-    @Override
-    public Iterator<OpResult> iterator() {
-        return results.iterator();
-    }
-
-    public int size() {
-        return results.size();
-    }
-
-    @Override
-    public void serialize(OutputArchive archive, String tag) throws IOException {
-        archive.startRecord(this, tag);
-
-        for (OpResult result : results) {
-            int err = result.getType() == ZooDefs.OpCode.error ? ((OpResult.ErrorResult)result).getErr() : 0;
-
-            new MultiHeader(result.getType(), false, err).serialize(archive, tag);
-
-            switch (result.getType()) {
-                case ZooDefs.OpCode.create:
-                    new CreateResponse(((OpResult.CreateResult) result).getPath()).serialize(archive, tag);
-                    break;
-                case ZooDefs.OpCode.create2:
-                	OpResult.CreateResult createResult = (OpResult.CreateResult) result;
-                    new Create2Response(createResult.getPath(),
-                    		createResult.getStat()).serialize(archive, tag);
-                    break;
-                case ZooDefs.OpCode.delete:
-                case ZooDefs.OpCode.check:
-                    break;
-                case ZooDefs.OpCode.setData:
-                    new SetDataResponse(((OpResult.SetDataResult) result).getStat()).serialize(archive, tag);
-                    break;
-                case ZooDefs.OpCode.error:
-                    new ErrorResponse(((OpResult.ErrorResult) result).getErr()).serialize(archive, tag);
-                    break;
-                default:
-                    throw new IOException("Invalid type " + result.getType() + " in MultiResponse");
-            }
-        }
-        new MultiHeader(-1, true, -1).serialize(archive, tag);
-        archive.endRecord(this, tag);
-    }
-
-    @Override
-    public void deserialize(InputArchive archive, String tag) throws IOException {
-        results = new ArrayList<OpResult>();
-
-        archive.startRecord(tag);
-        MultiHeader h = new MultiHeader();
-        h.deserialize(archive, tag);
-        while (!h.getDone()) {
-            switch (h.getType()) {
-                case ZooDefs.OpCode.create:
-                    CreateResponse cr = new CreateResponse();
-                    cr.deserialize(archive, tag);
-                    results.add(new OpResult.CreateResult(cr.getPath()));
-                    break;
-
-                case ZooDefs.OpCode.create2:
-                    Create2Response cr2 = new Create2Response();
-                    cr2.deserialize(archive, tag);
-                    results.add(new OpResult.CreateResult(cr2.getPath(), cr2.getStat()));
-                    break;
-
-                case ZooDefs.OpCode.delete:
-                    results.add(new OpResult.DeleteResult());
-                    break;
-
-                case ZooDefs.OpCode.setData:
-                    SetDataResponse sdr = new SetDataResponse();
-                    sdr.deserialize(archive, tag);
-                    results.add(new OpResult.SetDataResult(sdr.getStat()));
-                    break;
-
-                case ZooDefs.OpCode.check:
-                    results.add(new OpResult.CheckResult());
-                    break;
-
-                case ZooDefs.OpCode.error:
-                    //FIXME: need way to more cleanly serialize/deserialize exceptions
-                    ErrorResponse er = new ErrorResponse();
-                    er.deserialize(archive, tag);
-                    results.add(new OpResult.ErrorResult(er.getErr()));
-                    break;
-
-                default:
-                    throw new IOException("Invalid type " + h.getType() + " in MultiResponse");
-            }
-            h.deserialize(archive, tag);
-        }
-        archive.endRecord(tag);
-    }
-
-    public List<OpResult> getResultList() {
-        return results;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof MultiResponse)) return false;
-
-        MultiResponse other = (MultiResponse) o;
-
-        if (results != null) {
-            Iterator<OpResult> i = other.results.iterator();
-            for (OpResult result : results) {
-                if (i.hasNext()) {
-                    if (!result.equals(i.next())) {
-                        return false;
-                    }
-                } else {
-                    return false;
-                }
-            }
-            return !i.hasNext();
-        }
-        else return other.results == null;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = results.size();
-        for (OpResult result : results) {
-            hash = (hash * 35) + result.hashCode();
-        }
-        return hash;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/MultiTransactionRecord.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/MultiTransactionRecord.java b/zookeeper-common/src/main/java/org/apache/zookeeper/MultiTransactionRecord.java
deleted file mode 100644
index 336a677..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/MultiTransactionRecord.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-import org.apache.jute.InputArchive;
-import org.apache.jute.OutputArchive;
-import org.apache.jute.Record;
-import org.apache.zookeeper.proto.*;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Encodes a composite transaction.  In the wire format, each transaction
- * consists of a single MultiHeader followed by the appropriate request.
- * Each of these MultiHeaders has a type which indicates
- * the type of the following transaction or a negative number if no more transactions
- * are included.
- */
-public class MultiTransactionRecord implements Record, Iterable<Op> {
-    private List<Op> ops = new ArrayList<Op>();
-
-    public MultiTransactionRecord() {
-    }
-
-    public MultiTransactionRecord(Iterable<Op> ops) {
-        for (Op op : ops) {
-            add(op);
-        }
-    }
-
-    @Override
-    public Iterator<Op> iterator() {
-        return ops.iterator() ;
-    }
-
-    public void add(Op op) {
-        ops.add(op);
-    }
-
-    public int size() {
-        return ops.size();
-    }
-
-    @Override
-    public void serialize(OutputArchive archive, String tag) throws IOException {
-        archive.startRecord(this, tag);
-        for (Op op : ops) {
-            MultiHeader h = new MultiHeader(op.getType(), false, -1);
-            h.serialize(archive, tag);
-            switch (op.getType()) {
-                case ZooDefs.OpCode.create:
-                case ZooDefs.OpCode.create2:
-                case ZooDefs.OpCode.createTTL:
-                case ZooDefs.OpCode.createContainer:
-                case ZooDefs.OpCode.delete:
-                case ZooDefs.OpCode.setData:
-                case ZooDefs.OpCode.check:
-                    op.toRequestRecord().serialize(archive, tag);
-                    break;
-                default:
-                    throw new IOException("Invalid type of op");
-            }
-        }
-        new MultiHeader(-1, true, -1).serialize(archive, tag);
-        archive.endRecord(this, tag);
-    }
-
-    @Override
-    public void deserialize(InputArchive archive, String tag) throws IOException {
-        archive.startRecord(tag);
-        MultiHeader h = new MultiHeader();
-        h.deserialize(archive, tag);
-
-        while (!h.getDone()) {
-            switch (h.getType()) {
-                case ZooDefs.OpCode.create:
-                case ZooDefs.OpCode.create2:
-                case ZooDefs.OpCode.createContainer:
-                    CreateRequest cr = new CreateRequest();
-                    cr.deserialize(archive, tag);
-                    add(Op.create(cr.getPath(), cr.getData(), cr.getAcl(), cr.getFlags()));
-                    break;
-                case ZooDefs.OpCode.createTTL:
-                    CreateTTLRequest crTtl = new CreateTTLRequest();
-                    crTtl.deserialize(archive, tag);
-                    add(Op.create(crTtl.getPath(), crTtl.getData(), crTtl.getAcl(), crTtl.getFlags(), crTtl.getTtl()));
-                    break;
-                case ZooDefs.OpCode.delete:
-                    DeleteRequest dr = new DeleteRequest();
-                    dr.deserialize(archive, tag);
-                    add(Op.delete(dr.getPath(), dr.getVersion()));
-                    break;
-                case ZooDefs.OpCode.setData:
-                    SetDataRequest sdr = new SetDataRequest();
-                    sdr.deserialize(archive, tag);
-                    add(Op.setData(sdr.getPath(), sdr.getData(), sdr.getVersion()));
-                    break;
-                case ZooDefs.OpCode.check:
-                    CheckVersionRequest cvr = new CheckVersionRequest();
-                    cvr.deserialize(archive, tag);
-                    add(Op.check(cvr.getPath(), cvr.getVersion()));
-                    break;
-                default:
-                    throw new IOException("Invalid type of op");
-            }
-            h.deserialize(archive, tag);
-        }
-        archive.endRecord(tag);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof MultiTransactionRecord)) return false;
-
-        MultiTransactionRecord that = (MultiTransactionRecord) o;
-
-        if (ops != null) {
-            Iterator<Op> other = that.ops.iterator();
-            for (Op op : ops) {
-                boolean hasMoreData = other.hasNext();
-                if (!hasMoreData) {
-                    return false;
-                }
-                Op otherOp = other.next();
-                if (!op.equals(otherOp)) {
-                    return false;
-                }
-            }
-            return !other.hasNext();
-        } else {
-            return that.ops == null;
-        }
-
-    }
-
-    @Override
-    public int hashCode() {
-        int h = 1023;
-        for (Op op : ops) {
-            h = h * 25 + op.hashCode();
-        }
-        return h;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/Op.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/Op.java b/zookeeper-common/src/main/java/org/apache/zookeeper/Op.java
deleted file mode 100644
index c73cc79..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/Op.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-import org.apache.jute.Record;
-import org.apache.zookeeper.common.PathUtils;
-import org.apache.zookeeper.data.ACL;
-import org.apache.zookeeper.proto.CheckVersionRequest;
-import org.apache.zookeeper.proto.CreateRequest;
-import org.apache.zookeeper.proto.CreateTTLRequest;
-import org.apache.zookeeper.proto.DeleteRequest;
-import org.apache.zookeeper.proto.SetDataRequest;
-import org.apache.zookeeper.server.EphemeralType;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Represents a single operation in a multi-operation transaction.  Each operation can be a create, update
- * or delete or can just be a version check.
- *
- * Sub-classes of Op each represent each detailed type but should not normally be referenced except via
- * the provided factory methods.
- *
- * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode)
- * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode, org.apache.zookeeper.AsyncCallback.StringCallback, Object)
- * @see ZooKeeper#delete(String, int)
- * @see ZooKeeper#setData(String, byte[], int)
- */
-public abstract class Op {
-    private int type;
-    private String path;
-
-    // prevent untyped construction
-    private Op(int type, String path) {
-        this.type = type;
-        this.path = path;
-    }
-
-    /**
-     * Constructs a create operation.  Arguments are as for the ZooKeeper method of the same name.
-     * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode)
-     * @see CreateMode#fromFlag(int)
-     *
-     * @param path
-     *                the path for the node
-     * @param data
-     *                the initial data for the node
-     * @param acl
-     *                the acl for the node
-     * @param flags
-     *                specifying whether the node to be created is ephemeral
-     *                and/or sequential but using the integer encoding.
-     */
-    public static Op create(String path, byte[] data, List<ACL> acl, int flags) {
-        return new Create(path, data, acl, flags);
-    }
-
-    /**
-     * Constructs a create operation.  Arguments are as for the ZooKeeper method of the same name
-     * but adding an optional ttl
-     * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode)
-     * @see CreateMode#fromFlag(int)
-     *
-     * @param path
-     *                the path for the node
-     * @param data
-     *                the initial data for the node
-     * @param acl
-     *                the acl for the node
-     * @param flags
-     *                specifying whether the node to be created is ephemeral
-     *                and/or sequential but using the integer encoding.
-     * @param ttl
-     *                optional ttl or 0 (flags must imply a TTL creation mode)
-     */
-    public static Op create(String path, byte[] data, List<ACL> acl, int flags, long ttl) {
-        CreateMode createMode = CreateMode.fromFlag(flags, CreateMode.PERSISTENT);
-        if (createMode.isTTL()) {
-            return new CreateTTL(path, data, acl, createMode, ttl);
-        }
-        return new Create(path, data, acl, flags);
-    }
-
-    /**
-     * Constructs a create operation.  Arguments are as for the ZooKeeper method of the same name.
-     * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode)
-     *
-     * @param path
-     *                the path for the node
-     * @param data
-     *                the initial data for the node
-     * @param acl
-     *                the acl for the node
-     * @param createMode
-     *                specifying whether the node to be created is ephemeral
-     *                and/or sequential
-     */
-    public static Op create(String path, byte[] data, List<ACL> acl, CreateMode createMode) {
-        return new Create(path, data, acl, createMode);
-    }
-
-    /**
-     * Constructs a create operation.  Arguments are as for the ZooKeeper method of the same name
-     * but adding an optional ttl
-     * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode)
-     *
-     * @param path
-     *                the path for the node
-     * @param data
-     *                the initial data for the node
-     * @param acl
-     *                the acl for the node
-     * @param createMode
-     *                specifying whether the node to be created is ephemeral
-     *                and/or sequential
-     * @param ttl
-     *                optional ttl or 0 (createMode must imply a TTL)
-     */
-    public static Op create(String path, byte[] data, List<ACL> acl, CreateMode createMode, long ttl) {
-        if (createMode.isTTL()) {
-            return new CreateTTL(path, data, acl, createMode, ttl);
-        }
-        return new Create(path, data, acl, createMode);
-    }
-
-    /**
-     * Constructs a delete operation.  Arguments are as for the ZooKeeper method of the same name.
-     * @see ZooKeeper#delete(String, int)
-     *
-     * @param path
-     *                the path of the node to be deleted.
-     * @param version
-     *                the expected node version.
-     */
-    public static Op delete(String path, int version) {
-        return new Delete(path, version);
-    }
-
-    /**
-     * Constructs an update operation.  Arguments are as for the ZooKeeper method of the same name.
-     * @see ZooKeeper#setData(String, byte[], int)
-     *
-     * @param path
-     *                the path of the node
-     * @param data
-     *                the data to set
-     * @param version
-     *                the expected matching version
-     */
-    public static Op setData(String path, byte[] data, int version) {
-        return new SetData(path, data, version);
-    }
-
-
-    /**
-     * Constructs an version check operation.  Arguments are as for the ZooKeeper.setData method except that
-     * no data is provided since no update is intended.  The purpose for this is to allow read-modify-write
-     * operations that apply to multiple znodes, but where some of the znodes are involved only in the read,
-     * not the write.  A similar effect could be achieved by writing the same data back, but that leads to
-     * way more version updates than are necessary and more writing in general.
-     *
-     * @param path
-     *                the path of the node
-     * @param version
-     *                the expected matching version
-     */
-    public static Op check(String path, int version) {
-        return new Check(path, version);
-    }
-
-    /**
-     * Gets the integer type code for an Op.  This code should be as from ZooDefs.OpCode
-     * @see ZooDefs.OpCode
-     * @return  The type code.
-     */
-    public int getType() {
-        return type;
-    }
-
-    /**
-     * Gets the path for an Op.
-     * @return  The path.
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * Encodes an op for wire transmission.
-     * @return An appropriate Record structure.
-     */
-    public abstract Record toRequestRecord() ;
-    
-    /**
-     * Reconstructs the transaction with the chroot prefix.
-     * @return transaction with chroot.
-     */
-    abstract Op withChroot(String addRootPrefix);
-
-    /**
-     * Performs client path validations.
-     * 
-     * @throws IllegalArgumentException
-     *             if an invalid path is specified
-     * @throws KeeperException.BadArgumentsException
-     *             if an invalid create mode flag is specified
-     */
-    void validate() throws KeeperException {
-        PathUtils.validatePath(path);
-    }
-
-    //////////////////
-    // these internal classes are public, but should not generally be referenced.
-    //
-    public static class Create extends Op {
-        protected byte[] data;
-        protected List<ACL> acl;
-        protected int flags;
-
-        private Create(String path, byte[] data, List<ACL> acl, int flags) {
-            super(getOpcode(CreateMode.fromFlag(flags, CreateMode.PERSISTENT)), path);
-            this.data = data;
-            this.acl = acl;
-            this.flags = flags;
-        }
-
-        private static int getOpcode(CreateMode createMode) {
-            if (createMode.isTTL()) {
-                return ZooDefs.OpCode.createTTL;
-            }
-            return createMode.isContainer() ? ZooDefs.OpCode.createContainer : ZooDefs.OpCode.create;
-        }
-
-        private Create(String path, byte[] data, List<ACL> acl, CreateMode createMode) {
-            super(getOpcode(createMode), path);
-            this.data = data;
-            this.acl = acl;
-            this.flags = createMode.toFlag();
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof Create)) return false;
-
-            Create op = (Create) o;
-
-            boolean aclEquals = true;
-            Iterator<ACL> i = op.acl.iterator();
-            for (ACL acl : op.acl) {
-                boolean hasMoreData = i.hasNext();
-                if (!hasMoreData) {
-                    aclEquals = false;
-                    break;
-                }
-                ACL otherAcl = i.next();
-                if (!acl.equals(otherAcl)) {
-                    aclEquals = false;
-                    break;
-                }
-            }
-            return !i.hasNext() && getType() == op.getType() && Arrays.equals(data, op.data) && flags == op.flags && aclEquals;
-        }
-
-        @Override
-        public int hashCode() {
-            return getType() + getPath().hashCode() + Arrays.hashCode(data);
-        }
-
-        @Override
-        public Record toRequestRecord() {
-            return new CreateRequest(getPath(), data, acl, flags);
-        }
-
-        @Override
-        Op withChroot(String path) {
-            return new Create(path, data, acl, flags);
-        }
-
-        @Override
-        void validate() throws KeeperException {
-            CreateMode createMode = CreateMode.fromFlag(flags);
-            PathUtils.validatePath(getPath(), createMode.isSequential());
-            EphemeralType.validateTTL(createMode, -1);
-        }
-    }
-
-    public static class CreateTTL extends Create {
-        private final long ttl;
-
-        private CreateTTL(String path, byte[] data, List<ACL> acl, int flags, long ttl) {
-            super(path, data, acl, flags);
-            this.ttl = ttl;
-        }
-
-        private CreateTTL(String path, byte[] data, List<ACL> acl, CreateMode createMode, long ttl) {
-            super(path, data, acl, createMode);
-            this.ttl = ttl;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            return super.equals(o) && (o instanceof CreateTTL) && (ttl == ((CreateTTL)o).ttl);
-        }
-
-        @Override
-        public int hashCode() {
-            return super.hashCode() + (int)(ttl ^ (ttl >>> 32));
-        }
-
-        @Override
-        public Record toRequestRecord() {
-            return new CreateTTLRequest(getPath(), data, acl, flags, ttl);
-        }
-
-        @Override
-        Op withChroot(String path) {
-            return new CreateTTL(path, data, acl, flags, ttl);
-        }
-
-        @Override
-        void validate() throws KeeperException {
-            CreateMode createMode = CreateMode.fromFlag(flags);
-            PathUtils.validatePath(getPath(), createMode.isSequential());
-            EphemeralType.validateTTL(createMode, ttl);
-        }
-    }
-
-    public static class Delete extends Op {
-        private int version;
-
-        private Delete(String path, int version) {
-            super(ZooDefs.OpCode.delete, path);
-            this.version = version;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof Delete)) return false;
-
-            Delete op = (Delete) o;
-
-            return getType() == op.getType() && version == op.version 
-                   && getPath().equals(op.getPath());
-        }
-
-        @Override
-        public int hashCode() {
-            return getType() + getPath().hashCode() + version;
-        }
-
-        @Override
-        public Record toRequestRecord() {
-            return new DeleteRequest(getPath(), version);
-        }
-
-        @Override
-        Op withChroot(String path) {
-            return new Delete(path, version);
-        }
-    }
-
-    public static class SetData extends Op {
-        private byte[] data;
-        private int version;
-
-        private SetData(String path, byte[] data, int version) {
-            super(ZooDefs.OpCode.setData, path);
-            this.data = data;
-            this.version = version;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof SetData)) return false;
-
-            SetData op = (SetData) o;
-
-            return getType() == op.getType() && version == op.version 
-                   && getPath().equals(op.getPath()) && Arrays.equals(data, op.data);
-        }
-
-        @Override
-        public int hashCode() {
-            return getType() + getPath().hashCode() + Arrays.hashCode(data) + version;
-        }
-
-        @Override
-        public Record toRequestRecord() {
-            return new SetDataRequest(getPath(), data, version);
-        }
-
-        @Override
-        Op withChroot(String path) {
-            return new SetData(path, data, version);
-        }
-    }
-
-    public static class Check extends Op {
-        private int version;
-
-        private Check(String path, int version) {
-            super(ZooDefs.OpCode.check, path);
-            this.version = version;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof Check)) return false;
-
-            Check op = (Check) o;
-
-            return getType() == op.getType() && getPath().equals(op.getPath()) && version == op.version;
-        }
-
-        @Override
-        public int hashCode() {
-            return getType() + getPath().hashCode() + version;
-        }
-
-        @Override
-        public Record toRequestRecord() {
-            return new CheckVersionRequest(getPath(), version);
-        }
-
-        @Override
-        Op withChroot(String path) {
-            return new Check(path, version);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/OpResult.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/OpResult.java b/zookeeper-common/src/main/java/org/apache/zookeeper/OpResult.java
deleted file mode 100644
index d294b8f..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/OpResult.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-
-import org.apache.zookeeper.data.Stat;
-
-/**
- * Encodes the result of a single part of a multiple operation commit.
- */
-public abstract class OpResult {
-    private int type;
-
-    private OpResult(int type) {
-        this.type = type;
-    }
-
-    /**
-     * Encodes the return type as from ZooDefs.OpCode.  Can be used
-     * to dispatch to the correct cast needed for getting the desired
-     * additional result data.
-     * @see ZooDefs.OpCode
-     * @return an integer identifying what kind of operation this result came from.
-     */
-    public int getType() {
-        return type;
-    }
-
-    /**
-     * A result from a create operation.  This kind of result allows the
-     * path to be retrieved since the create might have been a sequential
-     * create.
-     */
-    public static class CreateResult extends OpResult {
-        private String path;
-        private Stat stat;
-
-        public CreateResult(String path) {
-        	this(ZooDefs.OpCode.create, path, null);
-        }
-
-        public CreateResult(String path, Stat stat) {
-            this(ZooDefs.OpCode.create2, path, stat);
-        }
-
-        private CreateResult(int opcode, String path, Stat stat) {
-        	super(opcode);
-            this.path = path;
-            this.stat = stat;
-        }
-
-        public String getPath() {
-            return path;
-        }
-
-        public Stat getStat() {
-            return stat;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof CreateResult)) return false;
-
-            CreateResult other = (CreateResult) o;
-
-            boolean statsAreEqual = (stat == null && other.stat == null ||
-                        						(stat != null && other.stat != null &&
-                        					   stat.getMzxid() == other.stat.getMzxid()));
-            return getType() == other.getType() &&
-                   path.equals(other.getPath()) && statsAreEqual;
-        }
-
-        @Override
-        public int hashCode() {
-            return (int) (getType() * 35 + path.hashCode() +
-                    (stat == null ? 0 : stat.getMzxid()));
-        }
-    }
-
-    /**
-     * A result from a delete operation.  No special values are available.
-     */
-    public static class DeleteResult extends OpResult {
-        public DeleteResult() {
-            super(ZooDefs.OpCode.delete);
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof DeleteResult)) return false;
-
-            DeleteResult opResult = (DeleteResult) o;
-            return getType() == opResult.getType();
-        }
-
-        @Override
-        public int hashCode() {
-            return getType();
-        }
-    }
-
-    /**
-     * A result from a setData operation.  This kind of result provides access
-     * to the Stat structure from the update.
-     */
-    public static class SetDataResult extends OpResult {
-        private Stat stat;
-
-        public SetDataResult(Stat stat) {
-            super(ZooDefs.OpCode.setData);
-            this.stat = stat;
-        }
-
-        public Stat getStat() {
-            return stat;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof SetDataResult)) return false;
-
-            SetDataResult other = (SetDataResult) o;
-            return getType() == other.getType() && stat.getMzxid() == other.stat.getMzxid();
-        }
-
-        @Override
-        public int hashCode() {
-            return (int) (getType() * 35 + stat.getMzxid());
-        }
-    }
-
-    /**
-     * A result from a version check operation.  No special values are available.
-     */
-    public static class CheckResult extends OpResult {
-        public CheckResult() {
-            super(ZooDefs.OpCode.check);
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof CheckResult)) return false;
-
-            CheckResult other = (CheckResult) o;
-            return getType() == other.getType();
-        }
-
-        @Override
-        public int hashCode() {
-            return getType();
-        }
-    }
-
-    /**
-     * An error result from any kind of operation.  The point of error results
-     * is that they contain an error code which helps understand what happened.
-     * @see KeeperException.Code
-     *
-     */
-    public static class ErrorResult extends OpResult {
-        private int err;
-
-        public ErrorResult(int err) {
-            super(ZooDefs.OpCode.error);
-            this.err = err;
-        }
-
-        public int getErr() {
-            return err;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof ErrorResult)) return false;
-
-            ErrorResult other = (ErrorResult) o;
-            return getType() == other.getType() && err == other.getErr();
-        }
-
-        @Override
-        public int hashCode() {
-            return getType() * 35 + err;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/Quotas.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/Quotas.java b/zookeeper-common/src/main/java/org/apache/zookeeper/Quotas.java
deleted file mode 100644
index b82e339..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/Quotas.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-/**
- * this class manages quotas
- * and has many other utils
- * for quota
- */
-public class Quotas {
-
-    /** the zookeeper nodes that acts as the management and status node **/
-    public static final String procZookeeper = "/zookeeper";
-
-    /** the zookeeper quota node that acts as the quota
-     * management node for zookeeper */
-    public static final String quotaZookeeper = "/zookeeper/quota";
-
-    /**
-     * the limit node that has the limit of
-     * a subtree
-     */
-    public static final String limitNode = "zookeeper_limits";
-
-    /**
-     * the stat node that monitors the limit of
-     * a subtree.
-     */
-    public static final String statNode = "zookeeper_stats";
-
-    /**
-     * return the quota path associated with this
-     * prefix
-     * @param path the actual path in zookeeper.
-     * @return the limit quota path
-     */
-    public static String quotaPath(String path) {
-        return quotaZookeeper + path +
-        "/" + limitNode;
-    }
-
-    /**
-     * return the stat quota path associated with this
-     * prefix.
-     * @param path the actual path in zookeeper
-     * @return the stat quota path
-     */
-    public static String statPath(String path) {
-        return quotaZookeeper + path + "/" +
-        statNode;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/SaslClientCallbackHandler.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/SaslClientCallbackHandler.java b/zookeeper-common/src/main/java/org/apache/zookeeper/SaslClientCallbackHandler.java
deleted file mode 100644
index d6f5549..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/SaslClientCallbackHandler.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.zookeeper;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.sasl.AuthorizeCallback;
-import javax.security.sasl.RealmCallback;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This is used by the SASL mechanisms to get further information to complete
- * the authentication. For example, a SASL mechanism might use this callback
- * handler to do verification operation. The CallbackHandler interface here
- * refers to javax.security.auth.callback.CallbackHandler. It should not be
- * confused with ZooKeeper packet callbacks like
- * org.apache.zookeeper.server.auth.SaslServerCallbackHandler.
- */
-public class SaslClientCallbackHandler implements CallbackHandler {
-    private String password = null;
-    private static final Logger LOG = LoggerFactory.getLogger(SaslClientCallbackHandler.class);
-    private final String entity;
-    public SaslClientCallbackHandler(String password, String client) {
-        this.password = password;
-        this.entity = client;
-    }
-
-    public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
-        for (Callback callback : callbacks) {
-            if (callback instanceof NameCallback) {
-                NameCallback nc = (NameCallback) callback;
-                nc.setName(nc.getDefaultName());
-            }
-            else {
-                if (callback instanceof PasswordCallback) {
-                    PasswordCallback pc = (PasswordCallback)callback;
-                    if (password != null) {
-                        pc.setPassword(this.password.toCharArray());
-                    } else {
-                        LOG.warn("Could not login: the {} is being asked for a password, but the ZooKeeper {}" +
-                          " code does not currently support obtaining a password from the user." +
-                          " Make sure that the {} is configured to use a ticket cache (using" +
-                          " the JAAS configuration setting 'useTicketCache=true)' and restart the {}. If" +
-                          " you still get this message after that, the TGT in the ticket cache has expired and must" +
-                          " be manually refreshed. To do so, first determine if you are using a password or a" +
-                          " keytab. If the former, run kinit in a Unix shell in the environment of the user who" +
-                          " is running this Zookeeper {} using the command" +
-                          " 'kinit <princ>' (where <princ> is the name of the {}'s Kerberos principal)." +
-                          " If the latter, do" +
-                          " 'kinit -k -t <keytab> <princ>' (where <princ> is the name of the Kerberos principal, and" +
-                          " <keytab> is the location of the keytab file). After manually refreshing your cache," +
-                          " restart this {}. If you continue to see this message after manually refreshing" +
-                          " your cache, ensure that your KDC host's clock is in sync with this host's clock.",
-                          new Object[]{entity, entity, entity, entity, entity, entity, entity});
-                    }
-                }
-                else {
-                    if (callback instanceof RealmCallback) {
-                        RealmCallback rc = (RealmCallback) callback;
-                        rc.setText(rc.getDefaultText());
-                    }
-                    else {
-                        if (callback instanceof AuthorizeCallback) {
-                            AuthorizeCallback ac = (AuthorizeCallback) callback;
-                            String authid = ac.getAuthenticationID();
-                            String authzid = ac.getAuthorizationID();
-                            if (authid.equals(authzid)) {
-                                ac.setAuthorized(true);
-                            } else {
-                                ac.setAuthorized(false);
-                            }
-                            if (ac.isAuthorized()) {
-                                ac.setAuthorizedID(authzid);
-                            }
-                        }
-                        else {
-                            throw new UnsupportedCallbackException(callback, "Unrecognized SASL " + entity + "Callback");
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cb9f303b/zookeeper-common/src/main/java/org/apache/zookeeper/ServerAdminClient.java
----------------------------------------------------------------------
diff --git a/zookeeper-common/src/main/java/org/apache/zookeeper/ServerAdminClient.java b/zookeeper-common/src/main/java/org/apache/zookeeper/ServerAdminClient.java
deleted file mode 100644
index 5efa53e..0000000
--- a/zookeeper-common/src/main/java/org/apache/zookeeper/ServerAdminClient.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.zookeeper;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.nio.ByteBuffer;
-
-import org.apache.yetus.audience.InterfaceAudience;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@InterfaceAudience.Public
-public class ServerAdminClient {
-    private static final Logger LOG = LoggerFactory.getLogger(ServerAdminClient.class);
-
-    public static void ruok(String host, int port) {
-        Socket s = null;
-        try {
-            byte[] reqBytes = new byte[4];
-            ByteBuffer req = ByteBuffer.wrap(reqBytes);
-            req.putInt(ByteBuffer.wrap("ruok".getBytes()).getInt());
-            s = new Socket();
-            s.setSoLinger(false, 10);
-            s.setSoTimeout(20000);
-            s.connect(new InetSocketAddress(host, port));
-
-            InputStream is = s.getInputStream();
-            OutputStream os = s.getOutputStream();
-
-            os.write(reqBytes);
-
-            byte[] resBytes = new byte[4];
-
-            int rc = is.read(resBytes);
-            String retv = new String(resBytes);
-            System.out.println("rc=" + rc + " retv=" + retv);
-        } catch (IOException e) {
-            LOG.warn("Unexpected exception", e);
-        } finally {
-            if (s != null) {
-                try {
-                    s.close();
-                } catch (IOException e) {
-                    LOG.warn("Unexpected exception", e);
-                }
-            }
-        }
-    }
-
-    public static void dump(String host, int port) {
-        Socket s = null;
-        try {
-            byte[] reqBytes = new byte[4];
-            ByteBuffer req = ByteBuffer.wrap(reqBytes);
-            req.putInt(ByteBuffer.wrap("dump".getBytes()).getInt());
-            s = new Socket();
-            s.setSoLinger(false, 10);
-            s.setSoTimeout(20000);
-            s.connect(new InetSocketAddress(host, port));
-
-            InputStream is = s.getInputStream();
-            OutputStream os = s.getOutputStream();
-
-            os.write(reqBytes);
-
-            byte[] resBytes = new byte[1024];
-
-            int rc = is.read(resBytes);
-            String retv = new String(resBytes);
-            System.out.println("rc=" + rc + " retv=" + retv);
-        } catch (IOException e) {
-            LOG.warn("Unexpected exception", e);
-        } finally {
-            if (s != null) {
-                try {
-                    s.close();
-                } catch (IOException e) {
-                    LOG.warn("Unexpected exception", e);
-                }
-            }
-        }
-    }
-
-    public static void stat(String host, int port) {
-        Socket s = null;
-        try {
-            byte[] reqBytes = new byte[4];
-            ByteBuffer req = ByteBuffer.wrap(reqBytes);
-            req.putInt(ByteBuffer.wrap("stat".getBytes()).getInt());
-            s = new Socket();
-            s.setSoLinger(false, 10);
-            s.setSoTimeout(20000);
-            s.connect(new InetSocketAddress(host, port));
-
-            InputStream is = s.getInputStream();
-            OutputStream os = s.getOutputStream();
-
-            os.write(reqBytes);
-
-            byte[] resBytes = new byte[1024];
-
-            int rc = is.read(resBytes);
-            String retv = new String(resBytes);
-            System.out.println("rc=" + rc + " retv=" + retv);
-        } catch (IOException e) {
-            LOG.warn("Unexpected exception", e);
-        } finally {
-            if (s != null) {
-                try {
-                    s.close();
-                } catch (IOException e) {
-                    LOG.warn("Unexpected exception", e);
-                }
-            }
-        }
-    }
-
-    public static void kill(String host, int port) {
-        Socket s = null;
-        try {
-            byte[] reqBytes = new byte[4];
-            ByteBuffer req = ByteBuffer.wrap(reqBytes);
-            req.putInt(ByteBuffer.wrap("kill".getBytes()).getInt());
-            s = new Socket();
-            s.setSoLinger(false, 10);
-            s.setSoTimeout(20000);
-            s.connect(new InetSocketAddress(host, port));
-
-            InputStream is = s.getInputStream();
-            OutputStream os = s.getOutputStream();
-
-            os.write(reqBytes);
-            byte[] resBytes = new byte[4];
-
-            int rc = is.read(resBytes);
-            String retv = new String(resBytes);
-            System.out.println("rc=" + rc + " retv=" + retv);
-        } catch (IOException e) {
-            LOG.warn("Unexpected exception", e);
-        } finally {
-            if (s != null) {
-                try {
-                    s.close();
-                } catch (IOException e) {
-                    LOG.warn("Unexpected exception", e);
-                }
-            }
-        }
-    }
-
-    public static void setTraceMask(String host, int port, String traceMaskStr) {
-        Socket s = null;
-        try {
-            byte[] reqBytes = new byte[12];
-            ByteBuffer req = ByteBuffer.wrap(reqBytes);
-            long traceMask = Long.parseLong(traceMaskStr, 8);
-            req.putInt(ByteBuffer.wrap("stmk".getBytes()).getInt());
-            req.putLong(traceMask);
-
-            s = new Socket();
-            s.setSoLinger(false, 10);
-            s.setSoTimeout(20000);
-            s.connect(new InetSocketAddress(host, port));
-
-            InputStream is = s.getInputStream();
-            OutputStream os = s.getOutputStream();
-
-            os.write(reqBytes);
-
-            byte[] resBytes = new byte[8];
-
-            int rc = is.read(resBytes);
-            ByteBuffer res = ByteBuffer.wrap(resBytes);
-            long retv = res.getLong();
-            System.out.println("rc=" + rc + " retv=0"
-                    + Long.toOctalString(retv) + " masks=0"
-                    + Long.toOctalString(traceMask));
-            assert (retv == traceMask);
-        } catch (IOException e) {
-            LOG.warn("Unexpected exception", e);
-        } finally {
-            if (s != null) {
-                try {
-                    s.close();
-                } catch (IOException e) {
-                    LOG.warn("Unexpected exception", e);
-                }
-            }
-        }
-    }
-
-    public static void getTraceMask(String host, int port) {
-        Socket s = null;
-        try {
-            byte[] reqBytes = new byte[12];
-            ByteBuffer req = ByteBuffer.wrap(reqBytes);
-            req.putInt(ByteBuffer.wrap("gtmk".getBytes()).getInt());
-
-            s = new Socket();
-            s.setSoLinger(false, 10);
-            s.setSoTimeout(20000);
-            s.connect(new InetSocketAddress(host, port));
-
-            InputStream is = s.getInputStream();
-            OutputStream os = s.getOutputStream();
-
-            os.write(reqBytes);
-
-            byte[] resBytes = new byte[8];
-
-            int rc = is.read(resBytes);
-            ByteBuffer res = ByteBuffer.wrap(resBytes);
-            long retv = res.getLong();
-            System.out.println("rc=" + rc + " retv=0"
-                    + Long.toOctalString(retv));
-        } catch (IOException e) {
-            LOG.warn("Unexpected exception", e);
-        } finally {
-            if (s != null) {
-                try {
-                    s.close();
-                } catch (IOException e) {
-                    LOG.warn("Unexpected exception", e);
-                }
-            }
-        }
-    }
-
-    private static void usage() {
-        System.out
-                .println("usage: java [-cp CLASSPATH] org.apache.zookeeper.ServerAdminClient "
-                        + "host port op (ruok|stat|dump|kill|gettracemask|settracemask) [arguments]");
-
-    }
-
-    public static void main(String[] args) {
-        if (args.length < 3) {
-            usage();
-            return;
-        }
-        String host = args[0];
-        int port = Integer.parseInt(args[1]);
-        String op = args[2];
-        if (op.equalsIgnoreCase("gettracemask")) {
-            getTraceMask(host, port);
-        } else if (op.equalsIgnoreCase("settracemask")) {
-            setTraceMask(host, port, args[3]);
-        } else if (op.equalsIgnoreCase("ruok")) {
-            ruok(host, port);
-        } else if (op.equalsIgnoreCase("kill")) {
-            kill(host, port);
-        } else if (op.equalsIgnoreCase("stat")) {
-            stat(host, port);
-        } else if (op.equalsIgnoreCase("dump")) {
-            dump(host, port);
-        } else {
-            System.out.println("Unrecognized op: " + op);
-        }
-    }
-}


Mime
View raw message