text:
Spigradle v1.3.0 and further causes builds to fail due to kapt

Hello!
Honestly, I don't really know who's to blame here. We're working on our plugin's v2 version (visible at https://github.com/DumbDogDiner/StickyWallet/tree/2.0.0). We've gone through and upgraded a lot of dependencies, however migrating from Spigradle 1.2.4 to 2.0.0 causes compilation errors.
With v2.0.0, we get the following error:

kapt error
Execution failed for task ':kaptKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':kaptKotlin'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:205)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:203)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:184)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
	at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:334)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:142)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:94)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForAll(DefaultAsyncWorkTracker.java:80)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForCompletion(DefaultAsyncWorkTracker.java:68)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:576)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:553)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:536)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:276)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:265)
	at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:32)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:32)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
	at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:67)
	at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
	at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:34)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
	at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
	at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
	at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:159)
	at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:72)
	at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:43)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
	at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:192)
	... 30 more
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.jetbrains.kotlin.gradle.internal.KaptExecution.run(KaptWithoutKotlincTask.kt:158)
	at org.gradle.workers.internal.AdapterWorkAction.execute(AdapterWorkAction.java:57)
	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:98)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
	at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:198)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:215)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
	... 3 more
Caused by: org.jetbrains.kotlin.kapt3.base.util.KaptBaseError: Error while annotation processing
	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:126)
	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:35)
	at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:45)
	... 28 more

while changing back to 1.2.4 fixes it.
After some quick testing, it seems a change starting with version 1.3.0 causes these issues to occur.
Is this an issue with Spigradle specifically? Should I report this somewhere else? Was there a change in spigradle that affects projects? Thanks!

Hi @vladfrangu, I think there's a problem with StickyPlugin.kt in the 2.0.0 branch.
I'm not sure you used some compiler plugin, but I could resolve the error by just add the package info on StickyPlugin.kt; maybe you need to use refactoring feature on your IDE.
If you still have a problem after doing it, please let me know the error logs and how to reproduce it.

Hey, thanks for the reply!
Question, what do you mean "by just add the package info on StickyPlugin.kt"? I'm using IntelliJ Idea if that matters. Does that mean creating a package-info.java file? If so, what contents did it have? I created a simple one with
package stickyWallet;

But nothing changed. Thanks!

Ha, I figured it out, by just noticing the TINY ~ underneath the class keyword in the StickyPlugin.kt file. Apparently, it was missing a package stickyWallet at the top; everything works now! Thanks and sorry for this 😅

My pleasure, keep your great job :)

authors: EntryPointKR vladfrangu

repo: spigradle/spigradle


text:
Uniformise code between phantom and human notebooks

This issue describes the various items that need to be taken care of to uniformise code between phantom and human notebooks.
Implement in phantom notebook: data dictionary:
https://github.com/spinal-cord-7t/coil-qc-code/blob/453b88897fa66d5c8e902fbe24ab20026aed7b4a/data_processing-human.ipynb#L583-L594

Suggestion (from chatGPT) to use shared codebase:
The most elegant way to share code between two different Jupyter notebooks while minimizing duplication is to refactor the shared code into a separate, importable Python module. This allows you to define common functions, classes, and variables in a single file that both notebooks can access. Here’s how you can achieve this:
Step 1: Create a Separate Python Module for Shared Code
Create a new Python file (e.g., shared_code.py) that contains all the functions, classes, and variables you want to share between the notebooks. Place this file in the same directory as your Jupyter notebooks or in a subdirectory that is easily accessible.
For example, if you have two notebooks named notebook1.ipynb and notebook2.ipynb:

Create a file called shared_code.py in the same directory:# shared_code.py

def preprocess_data(data):
    # Shared data preprocessing code
    pass

def custom_plot(data, title=""):
    # Shared plotting function
    pass

class DataProcessor:
    # Shared class for processing data
    def __init__(self, data):
        self.data = data

    def process(self):
        # Process data
        pass

Step 2: Import the Shared Code in Each Notebook
In each of your Jupyter notebooks, import the shared code module using the following syntax:
# In notebook1.ipynb and notebook2.ipynb

from shared_code import preprocess_data, custom_plot, DataProcessor

# Now you can use the shared functions and classes
data = [...]  # Replace with actual data
preprocessed_data = preprocess_data(data)
processor = DataProcessor(preprocessed_data)
processor.process()
custom_plot(preprocessed_data, title="Example Plot")

Step 3: Optional — Use a notebooks Directory and Set PYTHONPATH
If you want to organize your project further, you can create a notebooks directory for your Jupyter notebooks and a src or utils directory for the shared code:
project_root/
│
├── notebooks/
│   ├── notebook1.ipynb
│   └── notebook2.ipynb
│
├── src/
    └── shared_code.py

To access the shared code from within notebook1.ipynb or notebook2.ipynb, you can modify the sys.path in each notebook to include the src directory:
import sys
sys.path.append('../src')  # Adjust path as needed

from shared_code import preprocess_data, custom_plot, DataProcessor

Step 4: Use Jupyter Notebook Magics for Development (Optional)
While developing the shared code, you can use the Jupyter notebook %autoreload magic to automatically reload changes from your shared module without restarting the kernel:
%load_ext autoreload
%autoreload 2

from shared_code import preprocess_data, custom_plot, DataProcessor

This approach will ensure that any changes you make to shared_code.py are reflected immediately in the notebooks without re-importing the module.
Benefits of This Approach

Code Reusability: Shared code is refactored into a single module that can be imported and used across multiple notebooks.
Maintainability: Changes to shared functions or classes need to be made only once in the shared module.
Organization: Project structure is clear and organized, with notebooks and shared code in separate directories if desired.

Alternative Approaches

Jupyter Notebook %run Magic:
You can place shared code in a separate Jupyter notebook (e.g., shared_code.ipynb) and use the %run magic command in both notebook1.ipynb and notebook2.ipynb:
%run ./shared_code.ipynb

However, this approach is less flexible compared to using a Python module and can lead to issues with dependency tracking.

Jupyter Notebook Extensions:
Use extensions like nbdev, which can turn Jupyter notebooks into modules and handle code sharing. This is particularly useful for complex projects but adds some overhead.

Final Recommendation
The most maintainable and scalable solution is to create a separate Python module (shared_code.py) and import it in each notebook. This keeps your notebooks clean, avoids code duplication, and allows you to organize your shared codebase effectively.

Additional suggestions about the use of functions vs. script:
In your scenario, you have a large code block that uses variables defined earlier in the notebook, and you want to duplicate or share this code without manually copying it between notebooks. Since this code relies on variables like subjects, GAMMA, and voltages defined earlier, directly extracting it into a separate function in a module would require passing these variables as arguments.
Instead, you can employ a combination of approaches that allows for shared code execution while keeping variable dependencies intact. Here’s an elegant way to handle this:
Approach 1: Define a Reusable Function with Parameters in a Shared Module
Move the repetitive code into a function that accepts the necessary variables as parameters. This helps avoid code duplication while maintaining flexibility. Here's how you can do it:

Create a shared_code.py module:
# shared_code.py

import os
import json
import nibabel as nib
import numpy as np
from pathlib import Path

def process_subject(subject, path_data, GAMMA, voltages, siemens_loss_factor=-0.095):
    """
    Processes a subject's B1 maps based on given reference voltages and stores the average map.

    Parameters:
    subject (str): The subject identifier.
    path_data (str): The path to the data directory.
    GAMMA (float): The gyromagnetic ratio.
    voltages (list): List of reference voltages to check.
    siemens_loss_factor (float): The power loss factor for the Siemens coil. Default is -0.095.

    Returns:
    None
    """
    b1_maps = []
    os.chdir(os.path.join(path_data, subject, "fmap"))

    # Fetch the reference voltage depending on subject or from JSON
    if subject == 'sub-MSSM1':
        ref_voltage = 450
    elif subject == 'sub-MSSM2':
        ref_voltage = 350
    elif subject == 'sub-MSSM3':
        ref_voltage = 450
    else:
        with open(f"{subject}_acq-famp_TB1DREAM.json", "r") as f:
            metadata = json.load(f)
            ref_voltage = metadata.get("TxRefAmp", "N/A")
            if ref_voltage == "N/A":
                ref_token = "N/A"
                for token in metadata.get("SeriesDescription", "N/A").split("_"):
                    if token.startswith("RefV"): ref_token = token
                ref_voltage = float(ref_token[4:-1])

    # Process initial reference flip angle map
    nii = nib.load(f"{subject}_acq-famp_TB1DREAM.nii.gz")
    meas_fa = nii.get_fdata()
    meas_fa[meas_fa < 200] = np.nan
    meas_fa[meas_fa > 500] = np.nan

    with open(f"{subject}_acq-famp_TB1DREAM.json", "r") as f:
        metadata = json.load(f)
        requested_fa = metadata.get("FlipAngle", "N/A")
        meas_fa = (meas_fa / 10) / requested_fa

    voltage_at_socket = ref_voltage * 10 ** siemens_loss_factor
    b1_map = meas_fa * (np.pi / (GAMMA * 1e-3 * voltage_at_socket))
    b1_map = b1_map * 1e9
    b1_maps.append(b1_map)

    # Process other reference voltage maps
    for voltage in voltages:
        my_file = Path(f"{subject}_acq-famp-{voltage}_TB1DREAM.nii.gz")
        if my_file.is_file():
            if subject == 'sub-MSSM2' and voltage == "1.5":
                ref_voltage = 450
            elif subject == 'sub-MSSM2' and voltage == "0.66":
                ref_voltage = 234
            elif subject == 'sub-MSSM3' and voltage == "0.66":
                ref_voltage = 328
            else:
                with open(f"{subject}_acq-famp-{voltage}_TB1DREAM.json", "r") as f:
                    metadata = json.load(f)
                    ref_voltage = metadata.get("TxRefAmp", "N/A")
                    if ref_voltage == "N/A":
                        ref_token = "N/A"
                        for token in metadata.get("SeriesDescription", "N/A").split("_"):
                            if token.startswith("RefV"): ref_token = token
                        ref_voltage = float(ref_token[4:-1])

            nii = nib.load(f"{subject}_acq-famp-{voltage}_TB1DREAM.nii.gz")
            meas_fa = nii.get_fdata()
            meas_fa[meas_fa < 200] = np.nan
            meas_fa[meas_fa > 500] = np.nan

            with open(f"{subject}_acq-famp-{voltage}_TB1DREAM.json", "r") as f:
                metadata = json.load(f)
                requested_fa = metadata.get("FlipAngle", "N/A")
                meas_fa = (meas_fa / 10) / requested_fa
        else:
            meas_fa = np.full((nii.header).get_data_shape(), np.nan)

        voltage_at_socket = ref_voltage * 10 ** siemens_loss_factor
        b1_map = meas_fa * (np.pi / (GAMMA * 1e-3 * voltage_at_socket))
        b1_map = b1_map * 1e9
        b1_maps.append(b1_map)

    avgB1 = np.nanmean(b1_maps, axis=0)

    nii_avgB1 = nib.Nifti1Image(avgB1, nii.affine, nii.header)
    nib.save(nii_avgB1, f"{subject}_DREAMTB1avgB1map.nii.gz")

In each Jupyter notebook:
Import the shared function and call it with the required parameters. This allows you to execute shared code without duplicating it across notebooks.
# notebook1.ipynb

from shared_code import process_subject

# Define the necessary variables
GAMMA = 2.675e8  # [rad / (s T)]
voltages = ["1.5", "0.66"]
path_data = "/path/to/data"
subjects = ["sub-MSSM1", "sub-MSSM2", "sub-MSSM3"]

for subject in subjects:
    process_subject(subject, path_data, GAMMA, voltages)

Approach 2: Use the %run Magic with Pre-defined Variables
If you prefer to keep using variables without refactoring the code into a function, you can separate the repetitive code block into another Jupyter notebook (e.g., shared_code.ipynb) and use the %run magic command:

Create a notebook called shared_code.ipynb that only contains the shared code (remove variable definitions).

In the main notebook (e.g., notebook1.ipynb), define the variables first and then execute shared_code.ipynb:
# notebook1.ipynb

GAMMA = 2.675e8  # [rad / (s T)]
voltages = ["1.5", "0.66"]
path_data = "/path/to/data"
subjects = ["sub-MSSM1", "sub-MSSM2", "sub-MSSM3"]

%run ./shared_code.ipynb

In shared_code.ipynb, the code will use the variables defined in the main notebook. This approach keeps the execution within the notebook context but might be less clear if you have complex dependencies or want to share code outside Jupyter notebooks.

source: gharchive/issue

license_type: permissive

license_source: github-api


text:
fix(GCE quickstart guide): Added missing steps for authentication

@dorbin Here's that PR.

LGTM

source: gharchive/pull-request

license: mit

license_source: bigquery


text:
Attributes: NativeAttributeReader does not respect inheritance for $name parameter.

https://3v4l.org/Xn2sb
With native $rc->getAttributes($name), the $name parameter filters by the class name, without taking into account inheritance.
The NativeAttributeReader uses this native filtering.
The FallbackAttributeReader, on the other hand, does respect inheritance.
In FallbackAttributeReader::format():
            if ($prototype->name !== $name && $name !== null && !\is_subclass_of($prototype->name, $name)) {

So, what should be the "canonical" behavior? Should we always respect inheritance, or never, or make it optional?

So, what should be the "canonical" behavior?

This seems to be unnecessary logic. The behavior should be similar to the native reader.
Thanks for finding problems!

I think for users it could be useful to take inheritance into account.

Yes and no. This is a fairly popular "problem", but there is no definitive solution for it how to deal with attribute conflicts. Moreover, there is no unambiguous hierarchy in the case of a chain of traits and interfaces.
class A implements B, C
{
    use D, E;
}

A, B, C, D, E ?
or A, D, E, B, C ?

What if some trait contains a contains another trait? What if an interface implements an another interface?
I think this functionality will be useful as a separate package, which allows not only to specify the required inheritance chain, but also to correctly merge attributes (In the case of duplicate attributes at "different levels" of inheritance - sometimes they need to be combined into one, instead of getting two different attributes at once: one from the child, the other from the parent).

Actually all that anyone could expect from this is the behavior equivalent to instanceof and is_a(), that is also used for covariance and contravariance.

Moreover, there is no unambiguous hierarchy in the case of a chain of traits and interfaces.

I don't think traits should have anything to do with it.

What if some trait contains a contains another trait? What if an interface implements an another interface?

I don't see the problem. What am I missing here?

but also to correctly merge attributes (In the case of duplicate attributes at "different levels" of inheritance - sometimes they need to be combined into one, instead of getting two different attributes at once: one from the child, the other from the parent).

This seems like a separate problem.
For attributes I would expect to only get the attributes that are defined directly on the class or method itself, not on some parent class.
Duplicate attributes should simply be treated as two distinct objects.
Any kind of "merging" should be done by the user / consuming code.
A useful pattern can be "active" attribute objects.
E.g. for annotated routes in controller classes, we could have this:
interface RouteModifierInterface {
  function modifyRoute(Route $route);
}
#[Attribute]
class RouteAccess implements RouteModifierInterface {
  public function __construct(
    private string $permissionName
  ) {}
  public function modifyRoute(Route $route) {
    $route->setPermission($this->permissionName);
  }
}

So the route discovery would look for attributes that implement RouteModifierInterface, and call ->modifyRoute() on each of them.

I apologize, I misunderstood the case the first time.
The native reader also takes inheritance into account: https://github.com/spiral/attributes/blob/master/src/Internal/NativeAttributeReader.php#L47
The second argument of the getAttributes method: https://3v4l.org/pnf53

Ah, I was not aware. Thanks!

I think we can close this. It was my mistake.

authors: SerafimArts donquixote

repo: spiral/framework

license: MIT


text:
Port the Python implementation to PHP

This PR ports the python implementation into PHP

Thanks a lot for your contribution! I updated the PHP example slightly to make it more in line with the previous Python example. I also added a composer.json file to make the example easier to run for anyone wanting to do so. We already had a requirements.txt file for the Python example so it made sense to have something similar here.

authors: MrRawbin linktoahref

repo: spiriusab/rest-api-examples


text:
feat: add support of required param in oauth config

Jira: https://jira.splunk.com/browse/ADDON-38644
Changes:

feat: add support of required param in OAuth config

The default value for required will be true to handle upgrade scenarios. For false, will need to be explicit in globalConfig.json.

:tada: This PR is included in version 1.8.0 :tada:
The release is available on:

v1.8.0
GitHub release

Your semantic-release bot :package::rocket:

authors: harshpatel-crest rfaircloth-splunk

repo: splunk/addonfactory-ucc-base-ui


text:
Twistlock Security Scan shows High Vulnerabilities for versions 1.2.7

Running the docker.io splunk/fluentd-hec image version 1.2.7 through Twistlock revealed some high/important vulnerabilities. Is it possible to fix these 4 issues? Here are the Twistlock scan results: splunk-fluentd-hec-latest-twistlockscan.xlsx

we have released 1.2.8 with security update. Thank you!

repo: splunk/fluent-plugin-splunk-hec


text:
R home is configured to incompatible R version

Using latest 2.4.0 release, my rservice container is in a crashloop.
R version = 4.4.1
spotfire@infra-dev-spotfire-spotfire-rservice-6f577fd7bf-r5wd5:/opt/spotfire/nodemanager$ R --version
R version 4.4.1 (2024-06-14) -- "Race for Your Life"
Copyright (C) 2024 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
https://www.gnu.org/licenses/.

Relevant logs:
Adding properties from nm/services/R/conf/additional-custom.properties to nm/services/R/conf/custom.properties
Using hostname: <redacted>
Naming service instance to infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc
Post install configuration of Spotfire Server Node Manager 14.4.0 was successful.
Bootstrapping Spotfire Node Manager 14.4.0  (build ID:f53c76c)...
INFO 2024-07-10T20:51:27,524+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: buildDate: 2024-05-22
INFO 2024-07-10T20:51:27,524+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: buildId: f53c76c3b2c6122b8cb97b6b9508d7439e0f4c61
INFO 2024-07-10T20:51:27,525+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.connection.time-to-live-seconds: 1080
INFO 2024-07-10T20:51:27,525+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.long-connect-timeout: 100000
INFO 2024-07-10T20:51:27,525+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.long-read-timeout: 360000
INFO 2024-07-10T20:51:27,525+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.non-streaming.connect-timeout: 10000
INFO 2024-07-10T20:51:27,525+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.non-streaming.connection-request-timeout: 10000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.non-streaming.read-timeout: 2000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.pool.default-max-per-route: 2000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.pool.max-total: 2000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.streaming.connect-timeout: 3600000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.streaming.connection-request-timeout: 3600000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.streaming.read-timeout: 3600000
INFO 2024-07-10T20:51:27,526+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.validate-after-inactivity-ms: 5000
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: monitoring.http-probes.enabled: true
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.autoconfigure.pre-check.max-tries: 20
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.autoconfigure.pre-check.retry-delay-seconds: 20
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.bundle.version: 78.0.14922.59310
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.certificate-monitor.retry-delay-seconds: 1
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.communication.port: 9443
INFO 2024-07-10T20:51:27,527+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.configuration: /opt/spotfire/nodemanager//nm/config/config.json
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.core-pool-keep-alive-time: 10
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.core-pool-size: 50
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.expire-offline: -1
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.externally-managed: true
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.heartbeat.minimum-missed: 2
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.heartbeat.threshold: 12000
INFO 2024-07-10T20:51:27,528+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.host: <redacted>
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.host.names: <redacted>
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.install.dir: /opt/spotfire/nodemanager//nm
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.keystore.location: /opt/spotfire/nodemanager//nm/trust/keystore.p12
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.maximum-pool-size: 60
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.memorydump-after-failures: -1
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.parallel-downloads: 10
INFO 2024-07-10T20:51:27,529+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.ports:
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.registration.port: 9080
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.remote: true
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service-defaults: services
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service.disable-restart-on-stop: true
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service.restart-threshold-milliseconds: 30000
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service.shutdown.delay: 60
INFO 2024-07-10T20:51:27,530+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.supervisor.known: infra-dev-spotfire-spotfire-server:9443-9080
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.cache-enabled: false
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.cache-timeout: 60
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.cache-timeout-absolute: 90
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.inspection-interval: 10
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.use.ip: false
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.worker-threads: 50
INFO 2024-07-10T20:51:27,531+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: performance-monitoring.metrics-exporter.enabled: true
INFO 2024-07-10T20:51:27,532+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: security.trust.hostname-verification-enabled: true
INFO 2024-07-10T20:51:27,532+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: server.backend.communication.port: 9443
INFO 2024-07-10T20:51:27,532+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: server.backend.registration.port: 9080
INFO 2024-07-10T20:51:27,532+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: server.name: infra-dev-spotfire-spotfire-server
INFO 2024-07-10T20:51:27,532+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: technicalVersion: 78.0.14922.59310
INFO 2024-07-10T20:51:27,532+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: user-agent.name: NodeManager
INFO 2024-07-10T20:51:27,893+0000 [*Initialization*] nodemanager.config.NodeManagerPropertyPlaceHolder: Found custom node manager properties in /opt/spotfire/nodemanager/nm/config/nodemanager.properties
INFO 2024-07-10T20:51:27,993+0000 [*Initialization*] server.security.HttpUtils: Retrieved the current fully qualified host name: infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc
INFO 2024-07-10T20:51:28,005+0000 [*Initialization*] nodemanager.executor.ExecutorServiceFactory: ScheduledThreadPool is using 50 threads and 10 semephore permits.
INFO 2024-07-10T20:51:28,006+0000 [*Initialization*] nodemanager.executor.ExecutorServiceFactory: Thread pool is using 50 threads with a maximum of 60 and a keepalive time of 10s.
INFO 2024-07-10T20:51:28,031+0000 [*Initialization*] server.http.HttpService: Switching to server Node [serverName=infra-dev-spotfire-spotfire-server, port=9443]
INFO 2024-07-10T20:51:28,168+0000 [*Initialization*] server.nodemanager.NodeManager: Overriding the server name with the nodemanager.host property that has been set: <redacted>
INFO 2024-07-10T20:51:28,168+0000 [*Initialization*] server.nodemanager.NodeManager: Adding <redacted> to alternate addresses [infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc]
INFO 2024-07-10T20:51:28,188+0000 [*Initialization*] server.nodemanager.NodeManager: Node Manager ID: b3451523-8bcb-4ba8-ba3f-b5614b610021
INFO 2024-07-10T20:51:28,189+0000 [*Initialization*] server.nodemanager.NodeManager: Site ID: null
INFO 2024-07-10T20:51:28,189+0000 [*Initialization*] server.nodemanager.NodeManager: Node Manager Server Name: <redacted>
INFO 2024-07-10T20:51:28,189+0000 [*Initialization*] server.nodemanager.NodeManager: Addresses: [<redacted>, infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc]
INFO 2024-07-10T20:51:28,189+0000 [*Initialization*] server.nodemanager.NodeManager: Communication port: 9443 and registration port 9080
INFO 2024-07-10T20:51:28,190+0000 [*Initialization*] server.nodemanager.NodeManager: Technical Version: 78.0.14922.59310
INFO 2024-07-10T20:51:28,190+0000 [*Initialization*] server.nodemanager.NodeManager: Product Version: 14.4.0
INFO 2024-07-10T20:51:28,190+0000 [*Initialization*] server.nodemanager.NodeManager: Build Date: 2024-05-22
INFO 2024-07-10T20:51:28,190+0000 [*Initialization*] server.nodemanager.NodeManager: Java vendor: Debian, Java version: 17.0.11
INFO 2024-07-10T20:51:28,191+0000 [*Initialization*] server.nodemanager.NodeManager: Available processors: 4, Max memory: 268435456,
INFO 2024-07-10T20:51:28,222+0000 [*Initialization*] actionlog.monitoring.MonitoringManager: No action log configuration found, monitoring will not take place
INFO 2024-07-10T20:51:28,226+0000 [*Initialization*] actionlog.monitoring.MonitoringManager: Logging performance monitoring measures with interval of 60 seconds
INFO 2024-07-10T20:51:28,490+0000 [*Initialization*] web.controller.NodeManagerInterceptor: Metrics exporter enabled
INFO 2024-07-10T20:51:28,617+0000 [*Initialization*] web.controller.NodeManagerInterceptor: Metrics exporter enabled
INFO 2024-07-10T20:51:28,621+0000 [*Initialization*] web.controller.MetricsController: Metrics exporter enabled
INFO 2024-07-10T20:51:28,637+0000 [*Initialization*] server.nodemanager.NodeManagerInitializer: Initializing (node ID: b3451523-8bcb-4ba8-ba3f-b5614b610021)
INFO 2024-07-10T20:51:28,638+0000 [*Initialization*] server.nodemanager.NodeManagerInitializer: No keystore defined. Delaying startup until keystore is created...
INFO 2024-07-10T20:51:29,129+0000 [*Initialization*] nodemanager.trust.CertificateMonitor: CSR with fingerprint 9bc616e24f6b7538a72d5c2dbcfe8dd18ce2b9fd714b4975c5680f04d5ea43a9 submitted successfully to the server Node [serverName=infra-dev-spotfire-spotfire-server, port=9443]
INFO 2024-07-10T20:51:29,309+0000 [] web.controller.RemoteTrustController: Received a new certificate from a supervisor.
INFO 2024-07-10T20:51:29,437+0000 [] nodemanager.trust.CertificateMonitor: The Node Manager will restart to load the new keystore.
INFO 2024-07-10T20:51:35,159+0000 [*Shutdown*] server.nodemanager.NodeManager: Node Manager shutting down...
INFO 2024-07-10T20:51:35,161+0000 [*Shutdown*] server.nodemanager.NodeManager: Node Manager shutting down...
INFO 2024-07-10T20:51:35,162+0000 [*Shutdown*] server.nodemanager.HeartBeatGenerator: Cancelling any scheduled heartbeat tasks.
INFO 2024-07-10T20:51:35,162+0000 [*Shutdown*] server.nodemanager.HeartBeatGenerator: Result of cancel: true
INFO 2024-07-10T20:51:35,162+0000 [*Shutdown*] server.nodemanager.HeartBeatSender: Heart beat submission has been cancelled.
INFO 2024-07-10T20:51:35,166+0000 [*Shutdown*] server.nodemanager.NodeManager: Node Manager shutting down...
INFO 2024-07-10T20:51:35,167+0000 [*Shutdown*] nodemanager.executor.ExecutorServiceFactory: Shutting down the executor services...
Starting Spotfire Node Manager 14.4.0  (Build Version: 78.0.14922.59310, Build Date: 2024-05-22, Build ID: f53c76c)...
INFO 2024-07-10T20:51:39,431+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: buildDate: 2024-05-22
INFO 2024-07-10T20:51:39,431+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: buildId: f53c76c3b2c6122b8cb97b6b9508d7439e0f4c61
INFO 2024-07-10T20:51:39,432+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.connection.time-to-live-seconds: 1080
INFO 2024-07-10T20:51:39,432+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.long-connect-timeout: 100000
INFO 2024-07-10T20:51:39,432+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.long-read-timeout: 360000
INFO 2024-07-10T20:51:39,432+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.non-streaming.connect-timeout: 10000
INFO 2024-07-10T20:51:39,433+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.non-streaming.connection-request-timeout: 10000
INFO 2024-07-10T20:51:39,433+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.non-streaming.read-timeout: 2000
INFO 2024-07-10T20:51:39,433+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.pool.default-max-per-route: 2000
INFO 2024-07-10T20:51:39,433+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.pool.max-total: 2000
INFO 2024-07-10T20:51:39,434+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.streaming.connect-timeout: 3600000
INFO 2024-07-10T20:51:39,434+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.streaming.connection-request-timeout: 3600000
INFO 2024-07-10T20:51:39,434+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.streaming.read-timeout: 3600000
INFO 2024-07-10T20:51:39,434+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: http.validate-after-inactivity-ms: 5000
INFO 2024-07-10T20:51:39,434+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: monitoring.http-probes.enabled: true
INFO 2024-07-10T20:51:39,434+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.autoconfigure.pre-check.max-tries: 20
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.autoconfigure.pre-check.retry-delay-seconds: 20
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.bundle.version: 78.0.14922.59310
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.certificate-monitor.retry-delay-seconds: 1
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.communication.port: 9443
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.configuration: /opt/spotfire/nodemanager//nm/config/config.json
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.core-pool-keep-alive-time: 10
INFO 2024-07-10T20:51:39,435+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.core-pool-size: 50
INFO 2024-07-10T20:51:39,436+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.expire-offline: -1
INFO 2024-07-10T20:51:39,436+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.externally-managed: true
INFO 2024-07-10T20:51:39,436+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.heartbeat.minimum-missed: 2
INFO 2024-07-10T20:51:39,436+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.heartbeat.threshold: 12000
INFO 2024-07-10T20:51:39,436+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.host: <redacted>
INFO 2024-07-10T20:51:39,436+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.host.names: <redacted>
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.install.dir: /opt/spotfire/nodemanager//nm
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.keystore.location: /opt/spotfire/nodemanager//nm/trust/keystore.p12
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.maximum-pool-size: 60
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.memorydump-after-failures: -1
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.parallel-downloads: 10
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.ports:
INFO 2024-07-10T20:51:39,437+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.registration.port: 9080
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.remote: true
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service-defaults: services
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service.disable-restart-on-stop: true
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service.restart-threshold-milliseconds: 30000
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.service.shutdown.delay: 60
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.supervisor.known: infra-dev-spotfire-spotfire-server:9443-9080
INFO 2024-07-10T20:51:39,438+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.cache-enabled: false
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.cache-timeout: 60
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.cache-timeout-absolute: 90
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.topology.inspection-interval: 10
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.use.ip: false
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: nodemanager.worker-threads: 50
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: performance-monitoring.metrics-exporter.enabled: true
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: security.trust.hostname-verification-enabled: true
INFO 2024-07-10T20:51:39,439+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: server.backend.communication.port: 9443
INFO 2024-07-10T20:51:39,440+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: server.backend.registration.port: 9080
INFO 2024-07-10T20:51:39,440+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: server.name: infra-dev-spotfire-spotfire-server
INFO 2024-07-10T20:51:39,440+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: technicalVersion: 78.0.14922.59310
INFO 2024-07-10T20:51:39,440+0000 [*Initialization*] server.config.NodeManagerPropertySource: Defining configuration: user-agent.name: NodeManager
INFO 2024-07-10T20:51:39,809+0000 [*Initialization*] nodemanager.config.NodeManagerPropertyPlaceHolder: Found custom node manager properties in /opt/spotfire/nodemanager/nm/config/nodemanager.properties
INFO 2024-07-10T20:51:40,041+0000 [*Initialization*] server.security.HttpUtils: Retrieved the current fully qualified host name: infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc
INFO 2024-07-10T20:51:40,044+0000 [*Initialization*] nodemanager.executor.ExecutorServiceFactory: ScheduledThreadPool is using 50 threads and 10 semephore permits.
INFO 2024-07-10T20:51:40,045+0000 [*Initialization*] nodemanager.executor.ExecutorServiceFactory: Thread pool is using 50 threads with a maximum of 60 and a keepalive time of 10s.
INFO 2024-07-10T20:51:40,069+0000 [*Initialization*] server.http.HttpService: Switching to server Node [serverName=infra-dev-spotfire-spotfire-server, port=9443]
INFO 2024-07-10T20:51:40,162+0000 [*Initialization*] server.nodemanager.NodeManager: Overriding the server name with the nodemanager.host property that has been set: <redacted>
INFO 2024-07-10T20:51:40,168+0000 [*Initialization*] server.nodemanager.NodeManager: Node Manager ID: b3451523-8bcb-4ba8-ba3f-b5614b610021
INFO 2024-07-10T20:51:40,170+0000 [*Initialization*] server.nodemanager.NodeManager: Site ID: 5c2c7b84-e1f4-4187-9799-85a2a48f0ebc
INFO 2024-07-10T20:51:40,170+0000 [*Initialization*] server.nodemanager.NodeManager: Node Manager Server Name: <redacted>
INFO 2024-07-10T20:51:40,170+0000 [*Initialization*] server.nodemanager.NodeManager: Addresses: [<redacted>, infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc]
INFO 2024-07-10T20:51:40,170+0000 [*Initialization*] server.nodemanager.NodeManager: Communication port: 9443 and registration port 9080
INFO 2024-07-10T20:51:40,170+0000 [*Initialization*] server.nodemanager.NodeManager: Technical Version: 78.0.14922.59310
INFO 2024-07-10T20:51:40,170+0000 [*Initialization*] server.nodemanager.NodeManager: Product Version: 14.4.0
INFO 2024-07-10T20:51:40,172+0000 [*Initialization*] server.nodemanager.NodeManager: Build Date: 2024-05-22
INFO 2024-07-10T20:51:40,172+0000 [*Initialization*] server.nodemanager.NodeManager: Java vendor: Debian, Java version: 17.0.11
INFO 2024-07-10T20:51:40,172+0000 [*Initialization*] server.nodemanager.NodeManager: Available processors: 4, Max memory: 268435456,
INFO 2024-07-10T20:51:40,212+0000 [*Initialization*] actionlog.monitoring.MonitoringManager: No action log configuration found, monitoring will not take place
INFO 2024-07-10T20:51:40,221+0000 [*Initialization*] actionlog.monitoring.MonitoringManager: Logging performance monitoring measures with interval of 60 seconds
INFO 2024-07-10T20:51:40,513+0000 [*Initialization*] web.controller.NodeManagerInterceptor: Metrics exporter enabled
INFO 2024-07-10T20:51:40,648+0000 [*Initialization*] web.controller.NodeManagerInterceptor: Metrics exporter enabled
INFO 2024-07-10T20:51:40,652+0000 [*Initialization*] web.controller.MetricsController: Metrics exporter enabled
INFO 2024-07-10T20:51:40,679+0000 [*Initialization*] server.nodemanager.NodeManagerInitializer: Initializing (node ID: b3451523-8bcb-4ba8-ba3f-b5614b610021)
INFO 2024-07-10T20:51:40,689+0000 [*Initialization*] security.trust.CertUtil: Contents of the internal key store (/opt/spotfire/nodemanager/nm/trust/keystore.p12):
INFO 2024-07-10T20:51:40,689+0000 [*Initialization*] security.trust.CertUtil: Alias name : spotfire node manager certificate
INFO 2024-07-10T20:51:40,690+0000 [*Initialization*] security.trust.CertUtil: 	Version : 3
INFO 2024-07-10T20:51:40,690+0000 [*Initialization*] security.trust.CertUtil: 	Subject : CN=b3451523-8bcb-4ba8-ba3f-b5614b610021, O=Spotfire
INFO 2024-07-10T20:51:40,690+0000 [*Initialization*] security.trust.CertUtil: 	Issued by : CN=Spotfire Signing CA, O=Spotfire
INFO 2024-07-10T20:51:40,690+0000 [*Initialization*] security.trust.CertUtil: 	Serial number : 99579f8c6e8115efc75947b679657b4506aebca1
INFO 2024-07-10T20:51:40,691+0000 [*Initialization*] security.trust.CertUtil: 	Valid from : Wed Jul 10 19:51:29 UTC 2024
INFO 2024-07-10T20:51:40,691+0000 [*Initialization*] security.trust.CertUtil: 	Valid until : Fri Jul 10 19:51:29 UTC 2026
INFO 2024-07-10T20:51:40,691+0000 [*Initialization*] security.trust.CertUtil: 	Subject Alternative Name : iPAddress: <redacted>
INFO 2024-07-10T20:51:40,692+0000 [*Initialization*] security.trust.CertUtil: 	Subject Alternative Name : dNSName: <redacted>
INFO 2024-07-10T20:51:40,694+0000 [*Initialization*] security.trust.CertUtil: 	Fingerprint (SHA1) : d94540a797f9e10b87212878a28e36cd1a57239f
INFO 2024-07-10T20:51:40,694+0000 [*Initialization*] security.trust.CertUtil: 	Fingerprint (SHA256) : fba02eb91b1cc39806fa37ae8398c06c4cd78f64c0e461e8bf2744f3c2e539f8
INFO 2024-07-10T20:51:40,694+0000 [*Initialization*] security.trust.CertUtil: 	Signature Algorithm : SHA256withRSA
INFO 2024-07-10T20:51:40,694+0000 [*Initialization*] security.trust.CertUtil: Alias name : 7886962156a47209976e53259bdcd77105e82238
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Version : 3
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Subject : CN=Spotfire Signing CA, O=Spotfire
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Issued by : CN=Spotfire Root CA, O=Spotfire
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Serial number : 7886962156a47209976e53259bdcd77105e82238
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Valid from : Wed Jul 10 19:42:46 UTC 2024
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Valid until : Mon Jul 10 19:42:46 UTC 2034
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Fingerprint (SHA1) : c5aeb6939e944b3e4467b44041940b209d36e7bc
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Fingerprint (SHA256) : 4a9417dee1890691461167e6ef0e9a8fcdc628ed00e5af50e0f163628f1e24a7
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: 	Signature Algorithm : SHA256withRSA
INFO 2024-07-10T20:51:40,695+0000 [*Initialization*] security.trust.CertUtil: Alias name : 2f2ba0782c28cc7736c1935cdc98acf0e6fb8441
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Version : 3
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Subject : CN=Spotfire Root CA, O=Spotfire
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Issued by : CN=Spotfire Root CA, O=Spotfire
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Serial number : 2f2ba0782c28cc7736c1935cdc98acf0e6fb8441
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Valid from : Wed Jul 10 19:42:44 UTC 2024
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Valid until : Mon Jul 10 19:42:44 UTC 2034
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Fingerprint (SHA1) : 2b52eceae3433c677203fe569885f8f8f0bb7c4a
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Fingerprint (SHA256) : 203117113eb13feb4b0db2e750f73215e102a97b6c58fc3d87d64a774a925f38
INFO 2024-07-10T20:51:40,696+0000 [*Initialization*] security.trust.CertUtil: 	Signature Algorithm : SHA256withRSA
INFO 2024-07-10T20:51:40,807+0000 [*Initialization*] server.nodemanager.NodeManagerInitializer: Started
INFO 2024-07-10T20:51:40,807+0000 [*AcquireAuthorization*] nodemanager.trust.DelayUntilAuthorizedGate: Checking to see if we (<redacted> b3451523-8bcb-4ba8-ba3f-b5614b610021) are trusted. Using infra-dev-spotfire-spotfire-server:9443
INFO 2024-07-10T20:51:41,075+0000 [*AcquireAuthorization*] nodemanager.trust.DelayUntilAuthorizedGate: Received response 200 OK We are trusted.
INFO 2024-07-10T20:51:41,077+0000 [*AcquireAuthorization*] server.nodemanager.NodeManagerInitializer: Started startup sequence
INFO 2024-07-10T20:51:41,077+0000 [*AcquireAuthorization*] server.nodemanager.NodeManager: NodeManager starting up and registering services serving <redacted>
INFO 2024-07-10T20:51:41,077+0000 [*AcquireAuthorization*] server.nodemanager.NodeManager: Node manager configured to run on port 9443 with ID b3451523-8bcb-4ba8-ba3f-b5614b610021 in site 5c2c7b84-e1f4-4187-9799-85a2a48f0ebc
INFO 2024-07-10T20:51:41,077+0000 [*AcquireAuthorization*] service.registry.Registry: Discovering services in /opt/spotfire/nodemanager/nm/services/R
INFO 2024-07-10T20:51:41,084+0000 [*AcquireAuthorization*] server.nodemanager.NodeManager: This node manager has the service:  R ID: 178016a3-8075-410b-adc1-6548efeeb18e in R
INFO 2024-07-10T20:51:41,085+0000 [*AcquireAuthorization*] nodemanager.action.AutoConfigureNodeManager: The Node Manager has a default configuration file: /opt/spotfire/nodemanager/nm/config/default.conf
INFO 2024-07-10T20:51:41,098+0000 [*AcquireAuthorization*] server.nodemanager.NodeManager: Ready to service requests.
INFO 2024-07-10T20:51:41,236+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.control.PrimusCommandHandler: Received PRIMUS_ANNOUNCE from Node [serverId=d69c89ea-2d7e-42cd-b6cc-2ca8ed52b77e, serverName=<redacted>, port=9443, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc]. Command GUID: 46c6b85c-8ac6-424a-823d-ec84a97dd3bc  Originated by NodeAnnounceCommandHandler
INFO 2024-07-10T20:51:41,236+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.control.PrimusCommandHandler: Discovered supervisor nodes in the network: [Node [serverId=d69c89ea-2d7e-42cd-b6cc-2ca8ed52b77e, serverName=<redacted>, capabilities=[], platform=LINUX, port=9443, primus=false, primusCapable=true, remote=false, online=true, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc]]
INFO 2024-07-10T20:51:41,237+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] server.http.HttpService: Switching to server Node [serverId=d69c89ea-2d7e-42cd-b6cc-2ca8ed52b77e, serverName=<redacted>, port=9443, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc]
INFO 2024-07-10T20:51:41,237+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.primus.HttpServerManager: Sending a new heart beat message to <redacted> from: Node [serverId=b3451523-8bcb-4ba8-ba3f-b5614b610021, serverName=<redacted>, port=9443, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc, externallyManaged]
INFO 2024-07-10T20:51:41,242+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.primus.PrimusPropertyManager: recognized primus change because current list is empty.
INFO 2024-07-10T20:51:41,242+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.primus.PrimusPropertyManager: Saving new server information in properties file. <redacted>:9443
INFO 2024-07-10T20:51:41,243+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.primus.PrimusPropertyManager: Saving supervisor list as <redacted>:9443-9080
INFO 2024-07-10T20:51:41,244+0000 [46c6b85c-8ac6-424a-823d-ec84a97dd3bc] nodemanager.trust.CertificateMonitor: Server list changed.
INFO 2024-07-10T20:51:51,134+0000 [ff8cb45d-352d-4c26-8a84-192dedbf41d3] nodemanager.control.ServiceConfigCommandHandler: Received IDENTIFY_SERVICES from Node [serverId=d69c89ea-2d7e-42cd-b6cc-2ca8ed52b77e, serverName=<redacted>, port=9443, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc]. Command GUID: ff8cb45d-352d-4c26-8a84-192dedbf41d3  Originated by HeartBeatInspector
INFO 2024-07-10T20:51:51,134+0000 [ff8cb45d-352d-4c26-8a84-192dedbf41d3] nodemanager.control.ServiceConfigCommandHandler: Announcing to supervisor 1 service configurations
INFO 2024-07-10T20:51:51,134+0000 [ff8cb45d-352d-4c26-8a84-192dedbf41d3] nodemanager.control.ServiceConfigCommandHandler: Announcing installation:  R 1.20.0.27
INFO 2024-07-10T20:51:51,294+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] nodemanager.control.StartServiceCommandHandler: Received START_SERVICE from Node [serverId=d69c89ea-2d7e-42cd-b6cc-2ca8ed52b77e, serverName=<redacted>, port=9443, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc]. Command GUID: ad8496bd-2751-4696-a7b6-26d52f619427
INFO 2024-07-10T20:51:51,296+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] nodemanager.control.StartServiceCommandHandler: Creating a new service based on a configured option with ID 1de304b7-c489-48dc-8065-8706f35fd92f
INFO 2024-07-10T20:51:51,297+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] nodemanager.control.ServiceManipulator: Requested port 9501 is available for service 1de304b7-c489-48dc-8065-8706f35fd92f
INFO 2024-07-10T20:51:51,303+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] server.nodemanager.NodeManager: Registering service 1de304b7-c489-48dc-8065-8706f35fd92f infra-dev-spotfire-spotfire-rservice-f47f4dccb-rhfmc capabilities [R]
INFO 2024-07-10T20:51:51,303+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] nodemanager.service.AbstractServiceManager: Determining if the service 1de304b7-c489-48dc-8065-8706f35fd92f should restart (attempt #0, startedCount=0). Last exit code was N/A
INFO 2024-07-10T20:51:51,304+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] nodemanager.service.AbstractServiceManager: Service 1de304b7-c489-48dc-8065-8706f35fd92f should be be restarted: Last exit message:
INFO 2024-07-10T20:51:51,304+0000 [ad8496bd-2751-4696-a7b6-26d52f619427] server.nodemanager.NodeManager: Starting service 1de304b7-c489-48dc-8065-8706f35fd92f
INFO 2024-07-10T20:51:51,306+0000 [service-1de304b7-c489-48dc-8065-8706f35fd92f-0] nodemanager.service.AbstractServiceManager: Acquired lock prior to starting service 1de304b7-c489-48dc-8065-8706f35fd92f
INFO 2024-07-10T20:51:51,306+0000 [service-1de304b7-c489-48dc-8065-8706f35fd92f-0] nodemanager.service.AbstractServiceManager: Running service status script for service 1de304b7-c489-48dc-8065-8706f35fd92f with command /opt/spotfire/nodemanager//nm/services/R/Tools/isservicerunning.sh
INFO 2024-07-10T20:51:51,306+0000 [service-1de304b7-c489-48dc-8065-8706f35fd92f-0] nodemanager.service.AbstractServiceManager: Could not find the tool for 1de304b7-c489-48dc-8065-8706f35fd92f (/opt/spotfire/nodemanager//nm/services/R/Tools/isservicerunning.sh)
INFO 2024-07-10T20:51:51,307+0000 [service-1de304b7-c489-48dc-8065-8706f35fd92f-0] nodemanager.service.AbstractServiceManager: The process status for 1de304b7-c489-48dc-8065-8706f35fd92f was checked and returned FAILED
INFO 2024-07-10T20:51:51,329+0000 [service-1de304b7-c489-48dc-8065-8706f35fd92f-0] nodemanager.service.AbstractServiceManager: Executing /opt/spotfire/nodemanager//nm/services/R/start-r-service.sh process for service 1de304b7-c489-48dc-8065-8706f35fd92f of type [R] in R
INFO 2024-07-10T20:51:51,354+0000 [ee1fca87-8d30-46f2-b92a-0f2ede3aac69] nodemanager.control.ServiceConfigCommandHandler: Received IDENTIFY_SERVICES from Node [serverId=b3451523-8bcb-4ba8-ba3f-b5614b610021, serverName=<redacted>, port=9443, siteID=5c2c7b84-e1f4-4187-9799-85a2a48f0ebc, externallyManaged]. Command GUID: ee1fca87-8d30-46f2-b92a-0f2ede3aac69  Originated by NetworkServiceRegistry
INFO 2024-07-10T20:51:51,355+0000 [ee1fca87-8d30-46f2-b92a-0f2ede3aac69] nodemanager.control.ServiceConfigCommandHandler: Announcing to supervisor 2 service configurations
INFO 2024-07-10T20:51:51,355+0000 [ee1fca87-8d30-46f2-b92a-0f2ede3aac69] nodemanager.control.ServiceConfigCommandHandler: Announcing service instance: 1de304b7-c489-48dc-8065-8706f35fd92f status STARTING
INFO 2024-07-10T20:51:51,355+0000 [ee1fca87-8d30-46f2-b92a-0f2ede3aac69] nodemanager.control.ServiceConfigCommandHandler: Announcing installation:  R 1.20.0.27
INFO 2024-07-10T20:51:56,969+0000 [] server.nodemanager.ServiceMonitor: The service 1de304b7-c489-48dc-8065-8706f35fd92f should not be restarted since restarts are disabled for all services
ERROR 2024-07-10T20:51:56,969+0000 [] server.nodemanager.ServiceMonitor: (FAILED) Process 1de304b7-c489-48dc-8065-8706f35fd92f notified. Next Status STOPPED
INFO 2024-07-10T20:51:56,974+0000 [] server.nodemanager.ServiceMonitor: Notifying about service: 1de304b7-c489-48dc-8065-8706f35fd92f in state FAILED/STOPPED. Last status message: R home is configured to incompatible R version. Recent Logs: com.tibco.spotfire.topology.exception.UnsupportedEngineConfigurationException: canary engine validation failed
	at com.tibco.spotfire.topology.engine.EngineQueueHandler.engineCanary(EngineQueueHandler.java:135) ~[service-core.jar:?]
	at com.tibco.spotfire.topology.engine.EngineQueueHandler.initialize(EngineQueueHandler.java:103) ~[service-core.jar:?]
	at com.tibco.spotfire.topology.engine.EngineQueueHandler.onApplicationEvent(EngineQueueHandler.java:674) [service-core.jar:?]
	at com.tibco.spotfire.topology.engine.EngineQueueHandler.onApplicationEvent(EngineQueueHandler.java:68) [service-core.jar:?]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) [spring-context.jar:6.1.5]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) [spring-context.jar:6.1.5]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) [spring-context.jar:6.1.5]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:451) [spring-context.jar:6.1.5]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:384) [spring-context.jar:6.1.5]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:984) [spring-context.jar:6.1.5]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) [spring-context.jar:6.1.5]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) [spring-boot.jar:3.2.4]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot.jar:3.2.4]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) [spring-boot.jar:3.2.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) [spring-boot.jar:3.2.4]
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:149) [spring-boot.jar:3.2.4]
	at com.tibco.spotfire.topology.ServiceMain.main(ServiceMain.java:50) [service-core.jar:?]
	at com.tibco.spotfire.topology.Application.main(Application.java:40) [service-core.jar:?]
Error: start-r-service.sh: The R service encountered exceptions. Check the r-service-***.log for more details.

My mistake. I neglected to include the 1.21.0 build files in the container image. All works! Thanks.


text:
Run UI tests on Xcode 8.2

In an attempt to improve UI test stability (and avoid the dreaded exit code 65 from xcodebuild), let’s try running our UI tests on Xcode 8.2, which has been suggested to include a lot of stability fixes for such tests.

@spotify/objc-dev

@cerihughes

Current coverage is 92.99% (diff: 100%)

Merging #172 into master will not change coverage

@@             master       #172   diff @@
==========================================
  Files            63         63
  Lines          4528       4528
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
  Hits           4211       4211
  Misses          317        317
  Partials          0          0

Powered by Codecov. Last update 640bca2...91d6c02

authors: JohnSundell codecov-io

repo: spotify/HubFramework


text:
fix helios-solo scripts for Docker for Mac

When DOCKER_HOST is not set, the helios-env script assumes that if the local OS is Linux then the Unix socket at /var/run/docker.sock can be used to communicate with the Docker daemon.
Docker for Mac also uses this socket and path and does not need DOCKER_HOST to be set to work, so add a test to see if a bare docker info command exits with a success and use the same Unix socket path when it exits successfully.
Also fixed some other low-hanging fruit in these scripts, specifically the mixing of tabs and spaces for indentation 😎

@spotify/helios-team
probably easier to review by ignoring whitespace with https://github.com/spotify/helios/pull/934/files?w=1

[Current coverage][cc-pull] is 48.97%

Merging [#934][cc-pull] into [master][cc-base-branch] will decrease coverage by 9.60%

28 files (not in diff) in ...y/helios/cli/command were modified. more

Misses +154
Partials +76
Hits -230

7 files (not in diff) in ...m/spotify/helios/cli were modified. more

Misses +27
Partials +23
Hits -50

12 files (not in diff) in ...otify/helios/testing were modified. more

Misses +11
Partials +84
Hits -95

3 files (not in diff) in ...cescommon/statistics were modified. more

Misses +6
Partials +1
Hits -7

18 files (not in diff) in ...scommon/coordination were modified. more

Misses +31
Partials +51
Hits -82

12 files (not in diff) in ...elios/servicescommon were modified. more

Misses +37
Partials +19
Hits -56

4 files (not in diff) in ...helios/rollingupdate were modified. more

Misses +6
Partials +13
Hits -19

5 files (not in diff) in ...ios/master/resources were modified. more

Misses +32
Hits -32

9 files (not in diff) in ...potify/helios/master were modified. more

Misses +80
Partials +23
Hits -103

27 files (not in diff) in ...spotify/helios/agent were modified. more

Misses +76
Partials +66
Hits -142

@@             master       #934   diff @@
==========================================
  Files           271        271
  Lines         12759      12759
  Methods           0          0
  Messages          0          0
  Branches       1644       1644
==========================================
- Hits           7473       6248   -1225
- Misses         5286       6037    +751
- Partials          0        474    +474

[][cc-pull]

Powered by Codecov. Last updated by [0f7e980...d3b3373][cc-compare]
[cc-base-branch]: https://codecov.io/gh/spotify/helios/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/spotify/helios/compare/0f7e980b25db17a103d7f40d7d4b2a1eeb88d2d1...d3b3373e0074f60138095fdda76543791b4aaf7d
[cc-pull]: https://codecov.io/gh/spotify/helios/pull/934?src=pr

:+1:

LGTM
(Though I'm still not a fan of maintaining these scripts and HSD.)

@negz I think there is still a lot of value in having the standalone helios-solo homebrew and Debian packages. They can be used outside of the Maven-build-and-test context for things like running jobs locally during development or to do one-off tests of how helios or your jobs would behave or otherwise test things without involving a real Helios cluster. IMHO the packages or the scripts around starting/creating/stopping/using the helios-solo-container should not go anywhere.

I won't argue that they don't add value - my main concern is around the cognitive and (potential) support burden of maintaining two similar yet different implementations of the same concept. I wonder whether the value they add is worth that.

It seems worth it to me for the reasons Matt pointed out. Any reduction in
duplicate logic if possible would be good though.
On Monday, June 6, 2016, Nic Cope notifications@github.com wrote:

I won't argue that they don't add value - my main concern is around the
cognitive and (potential) support burden of maintaining two similar yet
different implementations of the same concept. I wonder whether the value
they add is worth that.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/spotify/helios/pull/934#issuecomment-223960123, or mute
the thread
https://github.com/notifications/unsubscribe/AAdVbWzM8xOQVJzUNLne3ovM6Ql_6fGCks5qJCHygaJpZM4IqspS
.

--
David Xia
Software Engineer
dxia@spotify.com

authors: codecov-io davidxia mattnworb negz

repo: spotify/helios


text:
Moves Tdigest stat computation to SharedGroups combine phase. (Part 1 of 2)

Can I get a quick review for this PR the actual change and the integration tests will follow.
This is mostly boilerplate changes in Bucket and AggregationSession implementations.
The PR also add a new metric TdigestPoint, it is similar to group metric. It is used during the last phase of aggregation to
merge tdigest from different cluster.

@ao2017 this looks alright to me, was just wondering since the quantiles are removed in the PR: is that to make the tdigest aggregation more generic and then you'll introduce default quantiles later?
And why does TdigestStatInstanceUtils and testTDigestStatInstance continue to have stat in the name? What's the significance of removing it everywhere except there?

@ao2017 this looks alright to me, was just wondering since the quantiles are removed in the PR: is that to make the tdigest aggregation more generic and then you'll introduce default quantiles later?
And why does TdigestStatInstanceUtils and testTDigestStatInstance continue to have stat in the name? What's the significance of removing it everywhere except there?

I moved the quantile to a different file since the computation is moving at a different level. That change will be included in the second PR. I am trying to keep the file count in this PR down.
I also changed the name of the Utils and class and the test.

repo: spotify/heroic


text:
Gradle sync issue in Android Studio 3.3.2

When I try to sync the downloaded Mobius project, my sync fails with the following error message.
ERROR: No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

Installed version of Android Studio
Android Studio 3.3.2
Build #AI-182.5107.16.33.5314842, built on February 16, 2019
JRE: 1.8.0_152-release-1248-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6

I was able to fix this problem by changing the android build tools Gradle plugin version from 3.0.1 to 3.1.0.
Can send a PR if required.

Thanks for the report, a PR would be very welcome!

authors: pettermahlen ragunathjawahar

repo: spotify/mobius


text:
Update scio-avro, scio-core, ... to 0.13.6

About this PR
📦 Updates

com.spotify:scio-avro
com.spotify:scio-core
com.spotify:scio-google-cloud-platform
com.spotify:scio-parquet
com.spotify:scio-test

from 0.13.5 to 0.13.6
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.spotify" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.spotify" }
}]

labels: library-update, early-semver-minor, semver-spec-patch, commit-count:1

overtaken by https://github.com/spotify/ratatool/pull/689

authors: catherinejelder scala-steward

repo: spotify/ratatool


text:
Sprache only works with strings!

Why not trying to generalize it to handle streams of T? In my case, I have language that is a stream of tokens (XamlInstruction). I cannot create a parser with Sprache because it only allows me to create parsers whose base input is a string.
What about turning string inputs into IEnumerable. I've tried to do it myself, but it seems you're working with the concept of "lines" that is to coupled with other concepts like carriage returns, that aren't applicable in the generalization I'm proposing.

If I recall correctly, you can create a parser from anything. You just can't use most of the predefined methods that are available, and must recreate most of them yourself.
If you'd like to try another similar parser builder there's one available in the repo louthy/language-ext. When I checked it it was more generic, but had less features than Sprache.
Michelangelo P.

On 16 Jun 2016, at 23:15, José Manuel Nieto notifications@github.com wrote:
Why not trying to generalize it to handle streams of T? In my case, I have language that is a stream of tokens (XamlInstruction). I cannot create a parser with Sprache because it only allows me to create parsers whose base input is a string.
What about turning string inputs into IEnumerable. I've tried to do it myself, but it seems you're working with the concept of "lines" that is to coupled with other concepts like carriage returns, that aren't applicable in the generalization I'm proposing.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

There are a few limitations pretty much baked into Sprache - string-only input is one, and character-by-character parsing (no tokenization) is the other. Eventually after coming to grips with how the library works, both limitations become apparent, but imposing them makes it much easier to go from zero-to-parser without a lot of background knowledge.
I'd love to have a fully token-based/generic implementation otherwise similar to Sprache, but I think it's a separate project. Sprache is great for quick and easy text processing and should probably stay that way, but having a companion project that is token-based and generic would be a natural step forwards and let people (like we!) who've built large parsers on Sprache to migrate without too much pain... Thoughts?

I agree! @nblumhardt. A new Project would be the way to go. Unfortunately, I don't feel like I'm the one to start it from scratch :(

:-) Neither am I, to be honest .. I did create an early, very simple version of this, I will see if I can dig it out...

Closing this one as it's not able to be actioned right now, but I'd love to hear from anyone who gives this a shot :-)

@SuperJMN started: https://github.com/datalust/superpower
I'm realizing in the process what a nice sweet spot Sprache occupies. I'm getting better error messages (and handling some corner cases more elegantly) in my large test parser, but for quite a lot more effort. Worth it when the messages need to be displayed to end-users, but definitely more of a companion to Sprache parser than a "vnext" of it.
Having fun with it, but it's early days and not everything works particularly well just yet.... :-)

authors: SuperJMN mpartipilo nblumhardt

repo: sprache/Sprache


text:
Facilitate the consumption of multipart data

Original Stackoverflow question : https://stackoverflow.com/questions/44554072/error-in-processing-a-multipart-file-message-using-spring-cloud-data-flow-httpso
The user has a very common use case, you send multipart form data, and that data gets converted into a byte payload that could end in a file sink for example.
We need to set a convenient converter from MultiValueMap into perhaps a message which payload is the bytearray representation of the file.
In case of multiple files we could potentially split them in multiple messages, need to discuss this last one further.

IMO that must be just MultiValueMap with the MultipartFile entries converted to the byte[] for sending to downstream flow.
We can't split incoming multipart/form-data because it comes as a single entity from the client.
That should be already a task for splitter if that though.

Just  a thought @artembilan, I was hoping this split could be collocated with the app just to avoid the overhead of a network hop just to split the message. It may not be the purest form, but just seems a bit more pragmatic to me.
Or we just don't support multiple files at all, one file per request, so we can map it to a message. Because the challenge seems that when having multiple files, how would we combine them?
I guess that part of this "problem" is what we discussed later today around the fact that OOB apps do not really have a contract amongst them. So if we are to send this as a serialized payload, other apps should be able to read it.
I'm looking forward to discuss further and learn more on how we can improve this.

Well, multiple form doesn't mean "multi files". Among files you can pretty easy to have simple text values. The simplest example is a form to upload a file together with input for its name.
That's why it seems for me a bit awkward to split such a form.
Although I might agree that the splitMultipart option would be good compromise here.
See similar in JDBC Source: https://github.com/spring-cloud-stream-app-starters/jdbc/tree/master/spring-cloud-starter-stream-source-jdbc.
Regarding data format. Well, that can be simply a JSON'ized tuple, where byte[] representation for MultipartFiles would be just BASE64'ized. Such a JSON can simply be deserialized on the other side by the Binder. Seems for me we already have something on the matter.

But it could be right? I mean, one form can have multiple files attached to it, or am I making a fool of myself (most likely).
I like the Tuple idea, was looking at it, but I have a serious allergy to JSON :) I'd rather kryo it ;)

That's correct that we can send many files.
Well, actually we don't need to go so far. The email message is multipart by nature. There you may have several bodies and attachments.
Kryo is good, but it isn't readable by non-Java consumers.
Well, that is different story and should be discussed and eventually configured as strategy from the SCSt level.

authors: artembilan viniciusccarvalho

repo: spring-cloud-stream-app-starters/http


text:
Module structure

spring-cloud-aws-autoconfigure module has a dependency to spring-cloud-aws-context and context has every aws services needed. with this configuration all aws services get configured but I only want to configure lets say SNS. how is this possible?

This is all spring-boot goodness. Therefore, you can cherry pick which auto-configuration you want excluded via @EnableAutoConfiguration(exclude={SomeAutoConfiguration.class}) or spring.autoconfigure.exclude as described here.

thanks, didn't know this feature...

authors: PedroAlvarado borehack

repo: spring-cloud/spring-cloud-aws