Fix java detached actor not working (#26003)

detached java actor is not working(actor will be dead after driver exit) when creating a java actor with ActorLifetime.DETACHED option

Co-authored-by: sunkunjian1 <sunkunjian1@jd.com>
This commit is contained in:
tomsunelite 2022-06-27 11:21:06 +08:00 committed by GitHub
parent 1055eadde0
commit db6f8a2f01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 7 deletions

View file

@ -177,8 +177,9 @@ inline ActorCreationOptions ToActorCreationOptions(JNIEnv *env,
auto java_actor_lifetime = (jobject)env->GetObjectField(
actorCreationOptions, java_actor_creation_options_lifetime);
if (java_actor_lifetime != nullptr) {
is_detached = std::make_optional<bool>(
env->IsSameObject(java_actor_lifetime, STATUS_DETACHED));
int java_actor_lifetime_ordinal_value =
env->CallIntMethod(java_actor_lifetime, java_actor_lifetime_ordinal);
is_detached = java_actor_lifetime_ordinal_value == DETACHED_LIFETIME_ORDINAL_VALUE;
}
max_restarts =

View file

@ -115,7 +115,8 @@ jfieldID java_actor_creation_options_serialized_runtime_env;
jfieldID java_actor_creation_options_max_pending_calls;
jclass java_actor_lifetime_class;
jobject STATUS_DETACHED;
int DETACHED_LIFETIME_ORDINAL_VALUE;
jmethodID java_actor_lifetime_ordinal;
jclass java_placement_group_creation_options_class;
jclass java_placement_group_creation_options_strategy_class;
@ -366,10 +367,14 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
env->GetFieldID(java_actor_creation_options_class, "maxPendingCalls", "I");
java_actor_lifetime_class = LoadClass(env, "io/ray/api/options/ActorLifetime");
java_actor_lifetime_ordinal =
env->GetMethodID(java_actor_lifetime_class, "ordinal", "()I");
jfieldID java_actor_lifetime_detached_field = env->GetStaticFieldID(
java_actor_lifetime_class, "DETACHED", "Lio/ray/api/options/ActorLifetime;");
STATUS_DETACHED = env->GetStaticObjectField(java_actor_lifetime_class,
java_actor_lifetime_detached_field);
jobject status_detached = env->GetStaticObjectField(java_actor_lifetime_class,
java_actor_lifetime_detached_field);
DETACHED_LIFETIME_ORDINAL_VALUE =
env->CallIntMethod(status_detached, java_actor_lifetime_ordinal);
java_concurrency_group_impl_class =
LoadClass(env, "io/ray/runtime/ConcurrencyGroupImpl");

View file

@ -205,8 +205,10 @@ extern jfieldID java_actor_creation_options_serialized_runtime_env;
extern jfieldID java_actor_creation_options_max_pending_calls;
/// ActorLifetime enum class
extern jclass java_actor_lifetime_class;
/// Enum DETACHED of ActorLifetime class
extern jobject STATUS_DETACHED;
/// ordinal method of ActorLifetime class
extern jmethodID java_actor_lifetime_ordinal;
/// ordinal value of Enum DETACHED of ActorLifetime class
extern int DETACHED_LIFETIME_ORDINAL_VALUE;
/// ConcurrencyGroupImpl class
extern jclass java_concurrency_group_impl_class;
/// getFunctionDescriptors method of ConcurrencyGroupImpl class