@Override
	public boolean GetProperty(Slice property, StringBuffer value) {

		mutex_.tryLock();
		Slice in = property;
		Slice prefix = new Slice("leveldb.");
		if (!in.starts_with(prefix)) {
			return false;
		}
		in.remove_prefix(prefix.size());

		if (in.starts_with(new Slice("num-files-at-level"))) {
			in.remove_prefix("num-files-at-level".length());
			long level = logging.ConsumeDecimalNumber(in.toString());

			// in.empty();
			if (level >= config.kNumLevels) {
				return false;
			} else {
				String buf = versions_.NumLevelFiles((int) level) + "";
				value.append(buf);
				return true;
			}
		} else if (in.compareTo(new Slice("stats")) == 0) {
			String buf = "                               Compactions\n"
					+ "Level  Files Size(MB) Time(sec) Read(MB) Write(MB)\n"
					+ "--------------------------------------------------\n";
			value.append(buf);
			for (int level = 0; level < config.kNumLevels; level++) {
				int files = versions_.NumLevelFiles(level);
				if (stats_[level].micros > 0 || files > 0) {

					buf = level + " " + files + " "
							+ versions_.NumLevelBytes(level) / 1048576.0 + " "
							+ stats_[level].micros / 1e6 + " "
							+ stats_[level].bytes_read / 1048576.0 + " "
							+ stats_[level].bytes_written / 1048576.0 + "\n";
					value.append(buf);
				}
			}
			return true;
		} else if (in.compareTo(new Slice("sstables")) == 0) {
			value.append(versions_.current().DebugString());
			return true;
		}

		mutex_.unlock();
		return false;

	}