You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2013/10/05 04:53:16 UTC
[1/6] git commit: Expose connected thrift + native client counts
patch by Mikhail Stepura; reviewed by jbellis for CASSANDRA-5084
Updated Branches:
refs/heads/cassandra-1.2 cf38e9e6f -> 5b7dd5e62
refs/heads/cassandra-2.0 6529d7309 -> 27967f95b
refs/heads/trunk b7460871b -> d75e63f17
Expose connected thrift + native client counts
patch by Mikhail Stepura; reviewed by jbellis for CASSANDRA-5084
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5b7dd5e6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5b7dd5e6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5b7dd5e6
Branch: refs/heads/cassandra-1.2
Commit: 5b7dd5e62897d0ac13f96330e360d2262aeb0650
Parents: cf38e9e
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 4 21:51:39 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 4 21:51:39 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/metrics/ClientMetrics.java | 35 ++++++++++++++++++
.../cassandra/thrift/CassandraServer.java | 19 +++++++++-
.../cassandra/thrift/ThriftSessionManager.java | 5 +++
.../org/apache/cassandra/transport/Server.java | 37 ++++++++++++++------
5 files changed, 86 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3dc5e77..5af4e2e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -12,6 +12,7 @@
* Fix fat client schema pull NPE (CASSANDRA-6089)
* Fix memtable flushing for indexed tables (CASSANDRA-6112)
* Fix skipping columns with multiple slices (CASSANDRA-6119)
+ * Expose connected thrift + native client counts (CASSANDRA-5084)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/metrics/ClientMetrics.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/metrics/ClientMetrics.java b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
new file mode 100644
index 0000000..cb10ad5
--- /dev/null
+++ b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
@@ -0,0 +1,35 @@
+package org.apache.cassandra.metrics;
+
+import java.util.concurrent.Callable;
+
+import com.yammer.metrics.Metrics;
+import com.yammer.metrics.core.Gauge;
+
+public class ClientMetrics
+{
+ private static final MetricNameFactory factory = new DefaultNameFactory("Client");
+
+ public static final ClientMetrics instance = new ClientMetrics();
+
+ private ClientMetrics()
+ {
+ }
+
+ public void addCounter(String name, final Callable<Integer> provider)
+ {
+ Metrics.newGauge(factory.createMetricName(name), new Gauge<Integer>()
+ {
+ public Integer value()
+ {
+ try
+ {
+ return provider.call();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index 1959815..65ae177 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.util.*;
+import java.util.concurrent.Callable;
import java.util.concurrent.TimeoutException;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
@@ -53,8 +54,12 @@ import org.apache.cassandra.exceptions.RequestValidationException;
import org.apache.cassandra.exceptions.UnauthorizedException;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.locator.DynamicEndpointSnitch;
+import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.scheduler.IRequestScheduler;
-import org.apache.cassandra.service.*;
+import org.apache.cassandra.service.ClientState;
+import org.apache.cassandra.service.MigrationManager;
+import org.apache.cassandra.service.StorageProxy;
+import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.Pair;
@@ -80,6 +85,7 @@ public class CassandraServer implements Cassandra.Iface
public CassandraServer()
{
requestScheduler = DatabaseDescriptor.getRequestScheduler();
+ registerMetrics();
}
public ThriftClientState state()
@@ -1877,5 +1883,16 @@ public class CassandraServer implements Cassandra.Iface
return false;
}
+ private void registerMetrics()
+ {
+ ClientMetrics.instance.addCounter("connectedThriftClients", new Callable<Integer>()
+ {
+ @Override
+ public Integer call() throws Exception
+ {
+ return ThriftSessionManager.instance.getConnectedClients();
+ }
+ });
+ }
// main method moved to CassandraDaemon
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java b/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
index bbc4bff..9a537e8 100644
--- a/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
+++ b/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
@@ -73,4 +73,9 @@ public class ThriftSessionManager
if (logger.isTraceEnabled())
logger.trace("ClientState removed for socket addr {}", socket);
}
+
+ public int getConnectedClients()
+ {
+ return activeSocketSessions.size();
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/transport/Server.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/Server.java b/src/java/org/apache/cassandra/transport/Server.java
index 7400a8b..0ffb92b 100644
--- a/src/java/org/apache/cassandra/transport/Server.java
+++ b/src/java/org/apache/cassandra/transport/Server.java
@@ -22,6 +22,7 @@ import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.EnumMap;
+import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.net.ssl.SSLContext;
@@ -32,19 +33,12 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
+import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.security.SSLFactory;
-import org.apache.cassandra.service.CassandraDaemon;
-import org.apache.cassandra.service.IEndpointLifecycleSubscriber;
-import org.apache.cassandra.service.IMigrationListener;
-import org.apache.cassandra.service.MigrationManager;
-import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.service.*;
import org.apache.cassandra.transport.messages.EventMessage;
import org.jboss.netty.bootstrap.ServerBootstrap;
-import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.ChannelFactory;
-import org.jboss.netty.channel.ChannelPipeline;
-import org.jboss.netty.channel.ChannelPipelineFactory;
-import org.jboss.netty.channel.Channels;
+import org.jboss.netty.channel.*;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
@@ -76,6 +70,7 @@ public class Server implements CassandraDaemon.Server
EventNotifier notifier = new EventNotifier(this);
StorageService.instance.register(notifier);
MigrationManager.instance.register(notifier);
+ registerMetrics();
}
public Server(String hostname, int port)
@@ -140,6 +135,18 @@ public class Server implements CassandraDaemon.Server
connectionTracker.allChannels.add(channel);
}
+ private void registerMetrics()
+ {
+ ClientMetrics.instance.addCounter("connectedNativeClients", new Callable<Integer>()
+ {
+ @Override
+ public Integer call() throws Exception
+ {
+ return connectionTracker.getConnectedClients();
+ }
+ });
+ }
+
private void close()
{
// Close opened connections
@@ -187,6 +194,16 @@ public class Server implements CassandraDaemon.Server
{
allChannels.close().awaitUninterruptibly();
}
+
+ public int getConnectedClients()
+ {
+ /*
+ - When server is running: allChannels contains all clients' connections (channels)
+ plus one additional channel used for the server's own bootstrap.
+ - When server is stopped: the size is 0
+ */
+ return allChannels.size() != 0 ? allChannels.size() - 1 : 0;
+ }
}
private static class PipelineFactory implements ChannelPipelineFactory
[5/6] git commit: merge from 1.2
Posted by jb...@apache.org.
merge from 1.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/27967f95
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/27967f95
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/27967f95
Branch: refs/heads/cassandra-2.0
Commit: 27967f95b85b659aedb535946dabb04979bce600
Parents: 6529d73 5b7dd5e
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 4 21:53:02 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 4 21:53:02 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/metrics/ClientMetrics.java | 35 ++++++++++++++++++
.../cassandra/thrift/CassandraServer.java | 18 ++++++++--
.../cassandra/thrift/ThriftSessionManager.java | 5 +++
.../org/apache/cassandra/transport/Server.java | 37 ++++++++++++++------
5 files changed, 84 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 6a7c3fe,5af4e2e..1590dd0
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -34,43 -12,10 +34,44 @@@ Merged from 1.2
* Fix fat client schema pull NPE (CASSANDRA-6089)
* Fix memtable flushing for indexed tables (CASSANDRA-6112)
* Fix skipping columns with multiple slices (CASSANDRA-6119)
+ * Expose connected thrift + native client counts (CASSANDRA-5084)
-1.2.10
+2.0.1
+ * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
+ * Improve memory use defaults (CASSANDRA-5069)
+ * Make ThriftServer more easlly extensible (CASSANDRA-6058)
+ * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
+ * add file_cache_size_in_mb setting (CASSANDRA-5661)
+ * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
+ * Improve leveled compaction's ability to find non-overlapping L0 compactions
+ to work on concurrently (CASSANDRA-5921)
+ * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
+ * Log Merkle tree stats (CASSANDRA-2698)
+ * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
+ * Improve offheap memcpy performance (CASSANDRA-5884)
+ * Use a range aware scanner for cleanup (CASSANDRA-2524)
+ * Cleanup doesn't need to inspect sstables that contain only local data
+ (CASSANDRA-5722)
+ * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
+ * Improve native protocol serialization (CASSANDRA-5664)
+ * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
+ * Require superuser status for adding triggers (CASSANDRA-5963)
+ * Make standalone scrubber handle old and new style leveled manifest
+ (CASSANDRA-6005)
+ * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
+ * Fix paged ranges with multiple replicas (CASSANDRA-6004)
+ * Fix potential AssertionError during tracing (CASSANDRA-6041)
+ * Fix NPE in sstablesplit (CASSANDRA-6027)
+ * Migrate pre-2.0 key/value/column aliases to system.schema_columns
+ (CASSANDRA-6009)
+ * Paging filter empty rows too agressively (CASSANDRA-6040)
+ * Support variadic parameters for IN clauses (CASSANDRA-4210)
+ * cqlsh: return the result of CAS writes (CASSANDRA-5796)
+ * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
+ * Support named bind variables in CQL (CASSANDRA-6033)
+Merged from 1.2:
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
* Avoid second-guessing out-of-space state (CASSANDRA-5605)
* Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
* (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/thrift/CassandraServer.java
index 3d77743,65ae177..12176b7
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@@ -47,16 -44,18 +48,17 @@@ import org.apache.cassandra.cql3.QueryO
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.context.CounterContext;
import org.apache.cassandra.db.filter.IDiskAtomFilter;
-import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.marshal.MarshalException;
+import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.SliceQueryFilter;
+import org.apache.cassandra.db.marshal.CompositeType;
- import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.db.marshal.TimeUUIDType;
import org.apache.cassandra.dht.*;
-import org.apache.cassandra.exceptions.ReadTimeoutException;
-import org.apache.cassandra.exceptions.RequestExecutionException;
-import org.apache.cassandra.exceptions.RequestValidationException;
-import org.apache.cassandra.exceptions.UnauthorizedException;
+import org.apache.cassandra.exceptions.*;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.locator.DynamicEndpointSnitch;
+ import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.scheduler.IRequestScheduler;
++import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.MigrationManager;
import org.apache.cassandra.service.StorageProxy;
@@@ -1958,7 -1734,7 +1961,7 @@@ public class CassandraServer implement
try
{
ThriftClientState cState = state();
-- String queryString = uncompress(query,compression);
++ String queryString = uncompress(query, compression);
return QueryProcessor.prepare(queryString, cState);
}
catch (RequestValidationException e)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/src/java/org/apache/cassandra/transport/Server.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/transport/Server.java
index 5ac4a70,0ffb92b..bd403fe
--- a/src/java/org/apache/cassandra/transport/Server.java
+++ b/src/java/org/apache/cassandra/transport/Server.java
@@@ -30,23 -31,14 +31,16 @@@ import javax.net.ssl.SSLEngine
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.auth.IAuthenticator;
+import org.apache.cassandra.auth.ISaslAwareAuthenticator;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
+ import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.security.SSLFactory;
- import org.apache.cassandra.service.CassandraDaemon;
- import org.apache.cassandra.service.IEndpointLifecycleSubscriber;
- import org.apache.cassandra.service.IMigrationListener;
- import org.apache.cassandra.service.MigrationManager;
- import org.apache.cassandra.service.StorageService;
+ import org.apache.cassandra.service.*;
import org.apache.cassandra.transport.messages.EventMessage;
import org.jboss.netty.bootstrap.ServerBootstrap;
- import org.jboss.netty.channel.Channel;
- import org.jboss.netty.channel.ChannelFactory;
- import org.jboss.netty.channel.ChannelPipeline;
- import org.jboss.netty.channel.ChannelPipelineFactory;
- import org.jboss.netty.channel.Channels;
+ import org.jboss.netty.channel.*;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
[6/6] git commit: Merge branch 'cassandra-2.0' into trunk
Posted by jb...@apache.org.
Merge branch 'cassandra-2.0' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d75e63f1
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d75e63f1
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d75e63f1
Branch: refs/heads/trunk
Commit: d75e63f17b58ddebf58b5ccfaaf1876e493d5a37
Parents: b746087 27967f9
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 4 21:53:10 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 4 21:53:10 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/metrics/ClientMetrics.java | 35 ++++++++++++++++++
.../cassandra/thrift/CassandraServer.java | 18 ++++++++--
.../cassandra/thrift/ThriftSessionManager.java | 5 +++
.../org/apache/cassandra/transport/Server.java | 37 ++++++++++++++------
5 files changed, 84 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d75e63f1/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d75e63f1/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
[2/6] git commit: Expose connected thrift + native client counts
patch by Mikhail Stepura; reviewed by jbellis for CASSANDRA-5084
Posted by jb...@apache.org.
Expose connected thrift + native client counts
patch by Mikhail Stepura; reviewed by jbellis for CASSANDRA-5084
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5b7dd5e6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5b7dd5e6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5b7dd5e6
Branch: refs/heads/cassandra-2.0
Commit: 5b7dd5e62897d0ac13f96330e360d2262aeb0650
Parents: cf38e9e
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 4 21:51:39 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 4 21:51:39 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/metrics/ClientMetrics.java | 35 ++++++++++++++++++
.../cassandra/thrift/CassandraServer.java | 19 +++++++++-
.../cassandra/thrift/ThriftSessionManager.java | 5 +++
.../org/apache/cassandra/transport/Server.java | 37 ++++++++++++++------
5 files changed, 86 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3dc5e77..5af4e2e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -12,6 +12,7 @@
* Fix fat client schema pull NPE (CASSANDRA-6089)
* Fix memtable flushing for indexed tables (CASSANDRA-6112)
* Fix skipping columns with multiple slices (CASSANDRA-6119)
+ * Expose connected thrift + native client counts (CASSANDRA-5084)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/metrics/ClientMetrics.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/metrics/ClientMetrics.java b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
new file mode 100644
index 0000000..cb10ad5
--- /dev/null
+++ b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
@@ -0,0 +1,35 @@
+package org.apache.cassandra.metrics;
+
+import java.util.concurrent.Callable;
+
+import com.yammer.metrics.Metrics;
+import com.yammer.metrics.core.Gauge;
+
+public class ClientMetrics
+{
+ private static final MetricNameFactory factory = new DefaultNameFactory("Client");
+
+ public static final ClientMetrics instance = new ClientMetrics();
+
+ private ClientMetrics()
+ {
+ }
+
+ public void addCounter(String name, final Callable<Integer> provider)
+ {
+ Metrics.newGauge(factory.createMetricName(name), new Gauge<Integer>()
+ {
+ public Integer value()
+ {
+ try
+ {
+ return provider.call();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index 1959815..65ae177 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.util.*;
+import java.util.concurrent.Callable;
import java.util.concurrent.TimeoutException;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
@@ -53,8 +54,12 @@ import org.apache.cassandra.exceptions.RequestValidationException;
import org.apache.cassandra.exceptions.UnauthorizedException;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.locator.DynamicEndpointSnitch;
+import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.scheduler.IRequestScheduler;
-import org.apache.cassandra.service.*;
+import org.apache.cassandra.service.ClientState;
+import org.apache.cassandra.service.MigrationManager;
+import org.apache.cassandra.service.StorageProxy;
+import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.Pair;
@@ -80,6 +85,7 @@ public class CassandraServer implements Cassandra.Iface
public CassandraServer()
{
requestScheduler = DatabaseDescriptor.getRequestScheduler();
+ registerMetrics();
}
public ThriftClientState state()
@@ -1877,5 +1883,16 @@ public class CassandraServer implements Cassandra.Iface
return false;
}
+ private void registerMetrics()
+ {
+ ClientMetrics.instance.addCounter("connectedThriftClients", new Callable<Integer>()
+ {
+ @Override
+ public Integer call() throws Exception
+ {
+ return ThriftSessionManager.instance.getConnectedClients();
+ }
+ });
+ }
// main method moved to CassandraDaemon
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java b/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
index bbc4bff..9a537e8 100644
--- a/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
+++ b/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
@@ -73,4 +73,9 @@ public class ThriftSessionManager
if (logger.isTraceEnabled())
logger.trace("ClientState removed for socket addr {}", socket);
}
+
+ public int getConnectedClients()
+ {
+ return activeSocketSessions.size();
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/transport/Server.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/Server.java b/src/java/org/apache/cassandra/transport/Server.java
index 7400a8b..0ffb92b 100644
--- a/src/java/org/apache/cassandra/transport/Server.java
+++ b/src/java/org/apache/cassandra/transport/Server.java
@@ -22,6 +22,7 @@ import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.EnumMap;
+import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.net.ssl.SSLContext;
@@ -32,19 +33,12 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
+import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.security.SSLFactory;
-import org.apache.cassandra.service.CassandraDaemon;
-import org.apache.cassandra.service.IEndpointLifecycleSubscriber;
-import org.apache.cassandra.service.IMigrationListener;
-import org.apache.cassandra.service.MigrationManager;
-import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.service.*;
import org.apache.cassandra.transport.messages.EventMessage;
import org.jboss.netty.bootstrap.ServerBootstrap;
-import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.ChannelFactory;
-import org.jboss.netty.channel.ChannelPipeline;
-import org.jboss.netty.channel.ChannelPipelineFactory;
-import org.jboss.netty.channel.Channels;
+import org.jboss.netty.channel.*;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
@@ -76,6 +70,7 @@ public class Server implements CassandraDaemon.Server
EventNotifier notifier = new EventNotifier(this);
StorageService.instance.register(notifier);
MigrationManager.instance.register(notifier);
+ registerMetrics();
}
public Server(String hostname, int port)
@@ -140,6 +135,18 @@ public class Server implements CassandraDaemon.Server
connectionTracker.allChannels.add(channel);
}
+ private void registerMetrics()
+ {
+ ClientMetrics.instance.addCounter("connectedNativeClients", new Callable<Integer>()
+ {
+ @Override
+ public Integer call() throws Exception
+ {
+ return connectionTracker.getConnectedClients();
+ }
+ });
+ }
+
private void close()
{
// Close opened connections
@@ -187,6 +194,16 @@ public class Server implements CassandraDaemon.Server
{
allChannels.close().awaitUninterruptibly();
}
+
+ public int getConnectedClients()
+ {
+ /*
+ - When server is running: allChannels contains all clients' connections (channels)
+ plus one additional channel used for the server's own bootstrap.
+ - When server is stopped: the size is 0
+ */
+ return allChannels.size() != 0 ? allChannels.size() - 1 : 0;
+ }
}
private static class PipelineFactory implements ChannelPipelineFactory
[3/6] git commit: Expose connected thrift + native client counts
patch by Mikhail Stepura; reviewed by jbellis for CASSANDRA-5084
Posted by jb...@apache.org.
Expose connected thrift + native client counts
patch by Mikhail Stepura; reviewed by jbellis for CASSANDRA-5084
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5b7dd5e6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5b7dd5e6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5b7dd5e6
Branch: refs/heads/trunk
Commit: 5b7dd5e62897d0ac13f96330e360d2262aeb0650
Parents: cf38e9e
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 4 21:51:39 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 4 21:51:39 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/metrics/ClientMetrics.java | 35 ++++++++++++++++++
.../cassandra/thrift/CassandraServer.java | 19 +++++++++-
.../cassandra/thrift/ThriftSessionManager.java | 5 +++
.../org/apache/cassandra/transport/Server.java | 37 ++++++++++++++------
5 files changed, 86 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3dc5e77..5af4e2e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -12,6 +12,7 @@
* Fix fat client schema pull NPE (CASSANDRA-6089)
* Fix memtable flushing for indexed tables (CASSANDRA-6112)
* Fix skipping columns with multiple slices (CASSANDRA-6119)
+ * Expose connected thrift + native client counts (CASSANDRA-5084)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/metrics/ClientMetrics.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/metrics/ClientMetrics.java b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
new file mode 100644
index 0000000..cb10ad5
--- /dev/null
+++ b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
@@ -0,0 +1,35 @@
+package org.apache.cassandra.metrics;
+
+import java.util.concurrent.Callable;
+
+import com.yammer.metrics.Metrics;
+import com.yammer.metrics.core.Gauge;
+
+public class ClientMetrics
+{
+ private static final MetricNameFactory factory = new DefaultNameFactory("Client");
+
+ public static final ClientMetrics instance = new ClientMetrics();
+
+ private ClientMetrics()
+ {
+ }
+
+ public void addCounter(String name, final Callable<Integer> provider)
+ {
+ Metrics.newGauge(factory.createMetricName(name), new Gauge<Integer>()
+ {
+ public Integer value()
+ {
+ try
+ {
+ return provider.call();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index 1959815..65ae177 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.util.*;
+import java.util.concurrent.Callable;
import java.util.concurrent.TimeoutException;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
@@ -53,8 +54,12 @@ import org.apache.cassandra.exceptions.RequestValidationException;
import org.apache.cassandra.exceptions.UnauthorizedException;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.locator.DynamicEndpointSnitch;
+import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.scheduler.IRequestScheduler;
-import org.apache.cassandra.service.*;
+import org.apache.cassandra.service.ClientState;
+import org.apache.cassandra.service.MigrationManager;
+import org.apache.cassandra.service.StorageProxy;
+import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.Pair;
@@ -80,6 +85,7 @@ public class CassandraServer implements Cassandra.Iface
public CassandraServer()
{
requestScheduler = DatabaseDescriptor.getRequestScheduler();
+ registerMetrics();
}
public ThriftClientState state()
@@ -1877,5 +1883,16 @@ public class CassandraServer implements Cassandra.Iface
return false;
}
+ private void registerMetrics()
+ {
+ ClientMetrics.instance.addCounter("connectedThriftClients", new Callable<Integer>()
+ {
+ @Override
+ public Integer call() throws Exception
+ {
+ return ThriftSessionManager.instance.getConnectedClients();
+ }
+ });
+ }
// main method moved to CassandraDaemon
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java b/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
index bbc4bff..9a537e8 100644
--- a/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
+++ b/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
@@ -73,4 +73,9 @@ public class ThriftSessionManager
if (logger.isTraceEnabled())
logger.trace("ClientState removed for socket addr {}", socket);
}
+
+ public int getConnectedClients()
+ {
+ return activeSocketSessions.size();
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5b7dd5e6/src/java/org/apache/cassandra/transport/Server.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/Server.java b/src/java/org/apache/cassandra/transport/Server.java
index 7400a8b..0ffb92b 100644
--- a/src/java/org/apache/cassandra/transport/Server.java
+++ b/src/java/org/apache/cassandra/transport/Server.java
@@ -22,6 +22,7 @@ import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.EnumMap;
+import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.net.ssl.SSLContext;
@@ -32,19 +33,12 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
+import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.security.SSLFactory;
-import org.apache.cassandra.service.CassandraDaemon;
-import org.apache.cassandra.service.IEndpointLifecycleSubscriber;
-import org.apache.cassandra.service.IMigrationListener;
-import org.apache.cassandra.service.MigrationManager;
-import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.service.*;
import org.apache.cassandra.transport.messages.EventMessage;
import org.jboss.netty.bootstrap.ServerBootstrap;
-import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.ChannelFactory;
-import org.jboss.netty.channel.ChannelPipeline;
-import org.jboss.netty.channel.ChannelPipelineFactory;
-import org.jboss.netty.channel.Channels;
+import org.jboss.netty.channel.*;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
@@ -76,6 +70,7 @@ public class Server implements CassandraDaemon.Server
EventNotifier notifier = new EventNotifier(this);
StorageService.instance.register(notifier);
MigrationManager.instance.register(notifier);
+ registerMetrics();
}
public Server(String hostname, int port)
@@ -140,6 +135,18 @@ public class Server implements CassandraDaemon.Server
connectionTracker.allChannels.add(channel);
}
+ private void registerMetrics()
+ {
+ ClientMetrics.instance.addCounter("connectedNativeClients", new Callable<Integer>()
+ {
+ @Override
+ public Integer call() throws Exception
+ {
+ return connectionTracker.getConnectedClients();
+ }
+ });
+ }
+
private void close()
{
// Close opened connections
@@ -187,6 +194,16 @@ public class Server implements CassandraDaemon.Server
{
allChannels.close().awaitUninterruptibly();
}
+
+ public int getConnectedClients()
+ {
+ /*
+ - When server is running: allChannels contains all clients' connections (channels)
+ plus one additional channel used for the server's own bootstrap.
+ - When server is stopped: the size is 0
+ */
+ return allChannels.size() != 0 ? allChannels.size() - 1 : 0;
+ }
}
private static class PipelineFactory implements ChannelPipelineFactory
[4/6] git commit: merge from 1.2
Posted by jb...@apache.org.
merge from 1.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/27967f95
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/27967f95
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/27967f95
Branch: refs/heads/trunk
Commit: 27967f95b85b659aedb535946dabb04979bce600
Parents: 6529d73 5b7dd5e
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 4 21:53:02 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 4 21:53:02 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/metrics/ClientMetrics.java | 35 ++++++++++++++++++
.../cassandra/thrift/CassandraServer.java | 18 ++++++++--
.../cassandra/thrift/ThriftSessionManager.java | 5 +++
.../org/apache/cassandra/transport/Server.java | 37 ++++++++++++++------
5 files changed, 84 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 6a7c3fe,5af4e2e..1590dd0
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -34,43 -12,10 +34,44 @@@ Merged from 1.2
* Fix fat client schema pull NPE (CASSANDRA-6089)
* Fix memtable flushing for indexed tables (CASSANDRA-6112)
* Fix skipping columns with multiple slices (CASSANDRA-6119)
+ * Expose connected thrift + native client counts (CASSANDRA-5084)
-1.2.10
+2.0.1
+ * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
+ * Improve memory use defaults (CASSANDRA-5069)
+ * Make ThriftServer more easlly extensible (CASSANDRA-6058)
+ * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
+ * add file_cache_size_in_mb setting (CASSANDRA-5661)
+ * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
+ * Improve leveled compaction's ability to find non-overlapping L0 compactions
+ to work on concurrently (CASSANDRA-5921)
+ * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
+ * Log Merkle tree stats (CASSANDRA-2698)
+ * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
+ * Improve offheap memcpy performance (CASSANDRA-5884)
+ * Use a range aware scanner for cleanup (CASSANDRA-2524)
+ * Cleanup doesn't need to inspect sstables that contain only local data
+ (CASSANDRA-5722)
+ * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
+ * Improve native protocol serialization (CASSANDRA-5664)
+ * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
+ * Require superuser status for adding triggers (CASSANDRA-5963)
+ * Make standalone scrubber handle old and new style leveled manifest
+ (CASSANDRA-6005)
+ * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
+ * Fix paged ranges with multiple replicas (CASSANDRA-6004)
+ * Fix potential AssertionError during tracing (CASSANDRA-6041)
+ * Fix NPE in sstablesplit (CASSANDRA-6027)
+ * Migrate pre-2.0 key/value/column aliases to system.schema_columns
+ (CASSANDRA-6009)
+ * Paging filter empty rows too agressively (CASSANDRA-6040)
+ * Support variadic parameters for IN clauses (CASSANDRA-4210)
+ * cqlsh: return the result of CAS writes (CASSANDRA-5796)
+ * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
+ * Support named bind variables in CQL (CASSANDRA-6033)
+Merged from 1.2:
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
* Avoid second-guessing out-of-space state (CASSANDRA-5605)
* Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
* (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/thrift/CassandraServer.java
index 3d77743,65ae177..12176b7
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@@ -47,16 -44,18 +48,17 @@@ import org.apache.cassandra.cql3.QueryO
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.context.CounterContext;
import org.apache.cassandra.db.filter.IDiskAtomFilter;
-import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.marshal.MarshalException;
+import org.apache.cassandra.db.filter.NamesQueryFilter;
+import org.apache.cassandra.db.filter.SliceQueryFilter;
+import org.apache.cassandra.db.marshal.CompositeType;
- import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.db.marshal.TimeUUIDType;
import org.apache.cassandra.dht.*;
-import org.apache.cassandra.exceptions.ReadTimeoutException;
-import org.apache.cassandra.exceptions.RequestExecutionException;
-import org.apache.cassandra.exceptions.RequestValidationException;
-import org.apache.cassandra.exceptions.UnauthorizedException;
+import org.apache.cassandra.exceptions.*;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.locator.DynamicEndpointSnitch;
+ import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.scheduler.IRequestScheduler;
++import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.MigrationManager;
import org.apache.cassandra.service.StorageProxy;
@@@ -1958,7 -1734,7 +1961,7 @@@ public class CassandraServer implement
try
{
ThriftClientState cState = state();
-- String queryString = uncompress(query,compression);
++ String queryString = uncompress(query, compression);
return QueryProcessor.prepare(queryString, cState);
}
catch (RequestValidationException e)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/src/java/org/apache/cassandra/thrift/ThriftSessionManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/27967f95/src/java/org/apache/cassandra/transport/Server.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/transport/Server.java
index 5ac4a70,0ffb92b..bd403fe
--- a/src/java/org/apache/cassandra/transport/Server.java
+++ b/src/java/org/apache/cassandra/transport/Server.java
@@@ -30,23 -31,14 +31,16 @@@ import javax.net.ssl.SSLEngine
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.auth.IAuthenticator;
+import org.apache.cassandra.auth.ISaslAwareAuthenticator;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
+ import org.apache.cassandra.metrics.ClientMetrics;
import org.apache.cassandra.security.SSLFactory;
- import org.apache.cassandra.service.CassandraDaemon;
- import org.apache.cassandra.service.IEndpointLifecycleSubscriber;
- import org.apache.cassandra.service.IMigrationListener;
- import org.apache.cassandra.service.MigrationManager;
- import org.apache.cassandra.service.StorageService;
+ import org.apache.cassandra.service.*;
import org.apache.cassandra.transport.messages.EventMessage;
import org.jboss.netty.bootstrap.ServerBootstrap;
- import org.jboss.netty.channel.Channel;
- import org.jboss.netty.channel.ChannelFactory;
- import org.jboss.netty.channel.ChannelPipeline;
- import org.jboss.netty.channel.ChannelPipelineFactory;
- import org.jboss.netty.channel.Channels;
+ import org.jboss.netty.channel.*;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;