mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-28 05:43:50 +00:00
0bf9079d44
Summary: This should give us some performance benefit calling native C++ code. Closes https://github.com/facebook/rocksdb/issues/4786 See https://github.com/evolvedbinary/jni-benchmarks/ for more info. Pull Request resolved: https://github.com/facebook/rocksdb/pull/11882 Reviewed By: pdillinger Differential Revision: D53066207 Pulled By: ajkr fbshipit-source-id: daedef185215d0d8e791cd85bef598900bcb5bf2
231 lines
7.8 KiB
C++
231 lines
7.8 KiB
C++
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
//
|
|
// This file implements the "bridge" between Java and C++ for
|
|
// ROCKSDB_NAMESPACE::CompactionJobInfo.
|
|
|
|
#include <jni.h>
|
|
|
|
#include "include/org_rocksdb_CompactionJobInfo.h"
|
|
#include "rocksdb/listener.h"
|
|
#include "rocksjni/cplusplus_to_java_convert.h"
|
|
#include "rocksjni/portal.h"
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: newCompactionJobInfo
|
|
* Signature: ()J
|
|
*/
|
|
jlong Java_org_rocksdb_CompactionJobInfo_newCompactionJobInfo(JNIEnv*, jclass) {
|
|
auto* compact_job_info = new ROCKSDB_NAMESPACE::CompactionJobInfo();
|
|
return GET_CPLUSPLUS_POINTER(compact_job_info);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: disposeInternal
|
|
* Signature: (J)V
|
|
*/
|
|
void Java_org_rocksdb_CompactionJobInfo_disposeInternalJni(JNIEnv*, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
delete compact_job_info;
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: columnFamilyName
|
|
* Signature: (J)[B
|
|
*/
|
|
jbyteArray Java_org_rocksdb_CompactionJobInfo_columnFamilyName(JNIEnv* env,
|
|
jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return ROCKSDB_NAMESPACE::JniUtil::copyBytes(env, compact_job_info->cf_name);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: status
|
|
* Signature: (J)Lorg/rocksdb/Status;
|
|
*/
|
|
jobject Java_org_rocksdb_CompactionJobInfo_status(JNIEnv* env, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return ROCKSDB_NAMESPACE::StatusJni::construct(env, compact_job_info->status);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: threadId
|
|
* Signature: (J)J
|
|
*/
|
|
jlong Java_org_rocksdb_CompactionJobInfo_threadId(JNIEnv*, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return static_cast<jlong>(compact_job_info->thread_id);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: jobId
|
|
* Signature: (J)I
|
|
*/
|
|
jint Java_org_rocksdb_CompactionJobInfo_jobId(JNIEnv*, jclass, jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return static_cast<jint>(compact_job_info->job_id);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: baseInputLevel
|
|
* Signature: (J)I
|
|
*/
|
|
jint Java_org_rocksdb_CompactionJobInfo_baseInputLevel(JNIEnv*, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return static_cast<jint>(compact_job_info->base_input_level);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: outputLevel
|
|
* Signature: (J)I
|
|
*/
|
|
jint Java_org_rocksdb_CompactionJobInfo_outputLevel(JNIEnv*, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return static_cast<jint>(compact_job_info->output_level);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: inputFiles
|
|
* Signature: (J)[Ljava/lang/String;
|
|
*/
|
|
jobjectArray Java_org_rocksdb_CompactionJobInfo_inputFiles(JNIEnv* env, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return ROCKSDB_NAMESPACE::JniUtil::toJavaStrings(
|
|
env, &compact_job_info->input_files);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: outputFiles
|
|
* Signature: (J)[Ljava/lang/String;
|
|
*/
|
|
jobjectArray Java_org_rocksdb_CompactionJobInfo_outputFiles(JNIEnv* env, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return ROCKSDB_NAMESPACE::JniUtil::toJavaStrings(
|
|
env, &compact_job_info->output_files);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: tableProperties
|
|
* Signature: (J)Ljava/util/Map;
|
|
*/
|
|
jobject Java_org_rocksdb_CompactionJobInfo_tableProperties(JNIEnv* env, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
auto* map = &compact_job_info->table_properties;
|
|
|
|
jobject jhash_map = ROCKSDB_NAMESPACE::HashMapJni::construct(
|
|
env, static_cast<uint32_t>(map->size()));
|
|
if (jhash_map == nullptr) {
|
|
// exception occurred
|
|
return nullptr;
|
|
}
|
|
|
|
const ROCKSDB_NAMESPACE::HashMapJni::FnMapKV<
|
|
const std::string,
|
|
std::shared_ptr<const ROCKSDB_NAMESPACE::TableProperties>, jobject,
|
|
jobject>
|
|
fn_map_kv =
|
|
[env](const std::pair<
|
|
const std::string,
|
|
std::shared_ptr<const ROCKSDB_NAMESPACE::TableProperties>>&
|
|
kv) {
|
|
jstring jkey = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
|
|
env, &(kv.first), false);
|
|
if (env->ExceptionCheck()) {
|
|
// an error occurred
|
|
return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
|
|
}
|
|
|
|
jobject jtable_properties =
|
|
ROCKSDB_NAMESPACE::TablePropertiesJni::fromCppTableProperties(
|
|
env, *(kv.second.get()));
|
|
if (env->ExceptionCheck()) {
|
|
// an error occurred
|
|
env->DeleteLocalRef(jkey);
|
|
return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
|
|
}
|
|
|
|
return std::unique_ptr<std::pair<jobject, jobject>>(
|
|
new std::pair<jobject, jobject>(static_cast<jobject>(jkey),
|
|
jtable_properties));
|
|
};
|
|
|
|
if (!ROCKSDB_NAMESPACE::HashMapJni::putAll(env, jhash_map, map->begin(),
|
|
map->end(), fn_map_kv)) {
|
|
// exception occurred
|
|
return nullptr;
|
|
}
|
|
|
|
return jhash_map;
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: compactionReason
|
|
* Signature: (J)B
|
|
*/
|
|
jbyte Java_org_rocksdb_CompactionJobInfo_compactionReason(JNIEnv*, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return ROCKSDB_NAMESPACE::CompactionReasonJni::toJavaCompactionReason(
|
|
compact_job_info->compaction_reason);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: compression
|
|
* Signature: (J)B
|
|
*/
|
|
jbyte Java_org_rocksdb_CompactionJobInfo_compression(JNIEnv*, jclass,
|
|
jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
return ROCKSDB_NAMESPACE::CompressionTypeJni::toJavaCompressionType(
|
|
compact_job_info->compression);
|
|
}
|
|
|
|
/*
|
|
* Class: org_rocksdb_CompactionJobInfo
|
|
* Method: stats
|
|
* Signature: (J)J
|
|
*/
|
|
jlong Java_org_rocksdb_CompactionJobInfo_stats(JNIEnv*, jclass, jlong jhandle) {
|
|
auto* compact_job_info =
|
|
reinterpret_cast<ROCKSDB_NAMESPACE::CompactionJobInfo*>(jhandle);
|
|
auto* stats = new ROCKSDB_NAMESPACE::CompactionJobStats();
|
|
stats->Add(compact_job_info->stats);
|
|
return GET_CPLUSPLUS_POINTER(stats);
|
|
}
|